MySQL语句温习

MySQL语句温习

MYSQL的三种语言:

DDL DML DCL

1,SELECT VERSION();查询当前版本号
SELECT USER(); 查询当前用户名
SELECT NOW(); 查询当前时间
SHOW COLUMNS FROM tb_name;查看表结构
SHOW CREATE TABLE tb_name;查看建表语句
SHOW INDEXES FROM tb_name\G;查看表的约束,并且以网格的形式展现
2,对数据库的操作( {}两者必须选择一个, []可选项 )
创建数据库:
CREATE {DATABASE | SCHEMA} [IF NOT EXITS] db_name
[DEFAULT] CHARACTRE SET [=] charset_name;
[IF NOT
EXITS]的作用是如果存在相同的名字的数据库不会直接把错误信息抛给客户端。

 

DML(data manipulation language):

它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言

查询有多少数据库:
SHOW {DATABASES | SCHEMAS}
[LIKE ‘patter’ WHERE expr];

SHOW DATABASES; //显示所有数据库

DDL(data definition language):

DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用

修改数据库:
ALTER {DATABASE | SCHEMA} [db_name]
[DEFAULT] CHARACTRE SET [=] charset_name;

SELECT DATABASE(); //查看当前数据库

DCL(Data Control Language):

是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL

查看创建这个数据库的sql语句:
SHOW CREATE DATABASE sys;
删除数据库:
DROP {DATABASE | SCHEMA} [IF EXITS] db_name;
查看当前数据库:
SELECT DATABASE();

SHOW TABLES; //显示表名

数据库模型:

概念模型,逻辑模型,物理模型 ER图
数据库设计的步骤:
需求分析,概念结构设计,逻辑结构设计,物理结构设计,数据库实施,数据库运行和维护
数据库的引擎决定了数据在数据库中的存储方式

3,对数据表的操作
打开数据库
USE db_name;
创建表:
CREATE TABLE table_name(
column_name datatype,
……
);
unsigned代表符号位,如果表示数据为正数则不需要符号位,float(M,D)表示总的位数是8位,小数点后面是2位。
CREATE TABLE tb1(
username VARCHAR(20) NOT NULL KEY AUTO_INCREMENT,
salary FLOAT(8,2) UNSIGNED UNIQUE KEY,
sex VARCHAR(10) DEFAULT ‘girl’
);

USER db_name[;] //切换数据库

数学函数:

ABS SUM AVG MAX MIN FLOOR(返回小于或等于x的最大整数) RAND TRUNCATE
SQRT(平方根)
UPPER UCASE LEFT SUBSTRINGSORT COUNT ASCII CHAR
NOW YEAR CURDATE CURRENT_DATE CURTIME CURRENT_TIME LOCALTIME SYSDATE
LOCALTIMESTAMP
ENCODE ENCRYPT IF IFNULL FORMAT CAST USER VERSION

查看数据表:
SHOW TABLES;

DESC tb_name;/DESCRIBE city;/EXPLAIN city; //显示数据库列信息

关于整个数据库的操作:

CREATE ALTER DROP
SHOW DATABASE
SHOW TABLES FROM db_school

查看数据表的结构:
SHOW COLUMNS FROM tb_name;

SHOW columns FROM db_name; //显示数据库列信息

修改数据库:

ALTER TABLE … ADD … VARCHAR
e.g. ALTER TABLE … ADD COLUMN id INT NOT NULL UNIQUE AUTO_INCREMENT
FIRST;
CHANGE 同时修改列名和数据类型
ALTER
MODIFY 只修改数据类型,不会干涉列名

插入数据:
INSERT [INTO] table_name [(col_name…..)] VALUES (val……);
选择数据:
SELECT expr FROM tb_name;

SELECT VERSION(); //查询当前数据库版本

主键外键的设计:

CONSTRAINT FK_student FOREIGN KEY (classNo) REFERENCES
tb_class(classNo)
CONSTRAINT PK_student ORIMARY KEY(studentNo)
DROP FOREIGN KEY
DROP PRIMARY KEY
DROP INDEX KEY
ALTER TABLE ADD … CONSTRAINT …

AUTO_INCREMENT属性用来设置自增主键,默认情况下其实值为1,每次增加值为1.

SELECT CURDATA();/SELECT CURRENT_DATE; //查询当前日期(yyyy-MM-dd)

使用SELECT FROM WHERE可能用到的其他关键字:

NOT
IN
NOT IN
LIKE ‘王%’
IS NULL
AND OR
ORDER BY
GROUP BY…HAVING

添加外键约束:
create table users(
id smallint(6) primary key,
pid smallint(6),
foreign key(pid) references provinces(pid)
);

SELECT NOW(); //查询当前时间(yyyy-MM-dd HH:mm:ss)

数据更新:

INSERT INTO … VALUES …
REPLACE INTO … VALUES…
UPDATE …SET … WHERE…
DELETE FROM… WHERE…
TRUNCATE

添加单列:
ALTER TABLE table_name ADD [COLUMN] col_name column_definition
[FIRST | AFTER ] column_name;

SELECT USER(); //查询当前登录账户

查询修改索引:

SHOW INDEX FROM …
CREATE TABLE … INDEX(studentname)
CREATE INDEX index_stu ON db.tb(studentNo)
ALTER TABLE … ADD INDEX …
DROP INDEX … ON …

添加多列:
ALTER TABLE table_name ADD [COLUMN]
(col_name,column_definition,…)
删除单列:
ALTER TABLE table_name DROP col_name;