Mysql规范:
关键字与操作语句大写,字段名小写
1.数据库操作
CREATE DATABASE database_name //创建数据库
DROP DATABASE database_name //删除数据库
USE DATABASE database_name //使用数据
SHOW DATABASE //查看数据
2.数据表操作
(1)内表操作
创建,删除,显示,修改数据表,重命名表名
CREATE TABLE table_name( //创建数据表
col_name data type,
...
)
DROP TABLE table_name //删除数据表
SHOW col_name FROM table_name //显示数据表的数据结构
or
DESC table_name
//重命名表名
ALTER TABLE old_table_name RENAME new_table_name or RENAME old_table_name to new_table_name
//添加表字段
ALTER TABLE table_name ADD(col_name datatype)
//删除表字段 ALTER TABLE table_name DROP col_name //修改字段名 ALTER TABLE table_name CHANGE old_col_name new_col_name //修改字段类型 ALTER TABLE table_name MODIFY col_name datatype //修改字段默认值 ALTER TABLE table_name ALTER col_name SET DEFAULT value //删除默认值 ALTER TABLE table_name ALTER col_name DROP DEFAULT
(2)表数据操作
插入,更新,查找,删除记录
INSERT INTO table_name VALUES() //插入记录
or
INSERT INTO table_name(col_name1,....) VALUES(value1,....)
UPADATE table_name set col_name = value WHERE condition //更新记录
SELECT col_name,col_name
FROM table_name //查询记录
WHERE condition
DELETE FROM table_name WHERE condition //删除记录
(3)表数据详细操作
分组,升降序,限制...
SELECT age FROM user GROUP BY age //分组 SELECT id,name,age FROM user GROUP BY age HAVING age<10 // HAVING后面的字段age必须存在select后面的字段中
//having与where类似,可以筛选数据,where后的表达式怎么写,having后就怎么写,where针对表中的列发挥作用,查询数据,having对查询结果中的列发挥作用,筛选数据 SELECT id,name FROM user ORDER BY id desc //降序,升序asc SELECT id,name FROM user LIMIT 2 //(限制查询出来的数据仅显示两条)
3.约束操作
功能分类:主键约束,外键约束,唯一约束,默认约束
列表级分类:列级约束与表级约束
列级约束:在列定义或者列定义后,表级对多个列定义约束,可在列定义后
问题:物理约束与逻辑约束
CASCADE:父表删除字段后,子表即有外键约束的表的数据也自动更新删除
一般情况下,都不会使用物理约束,删除父表的字段或数据后联动删除子表的数据,将所有的联动删除都在数据库表中设置,容易增加性能问题,现在大都将其作为业务上的一部分在代码中实现逻辑约束,有助于提高性能及效率。
//主键约束
CREATE TABLE table_name(
column_name data type PRIMARY KEY, //主键约束
...)
注:自动编号AUTO_INCREMENT与主键相结合使用,默认值为1,默认增长长度为1
CREATE TABLE table_name(
column_name data type PRIMARY KEY AUTO_INCREMENT, //自动编号
...)
//外键约束
CREATE TABLE tabale_name(
column_name data type FOREIGN KEY REFERENCE parent_table_name(column_name),
...)
//唯一约束
CREATE TABLE table_name(
column_name data type UNION KEY,
...)
唯一约束与主键约束的区别:主键是每一个表有且仅有一个,而唯一约束则是每一个表可以有多个
//默认约束
CREATE TABLE table_name(
column_name data type DEFAULT 默认值,
...)
4.子查询与连接
(1)子查询
a.比较运算符引发的子查询
注意:当对比的数据等于两条或多余两条的时候,即当子查询返回多个结果时,在用普通的比较运算符子查询来查询数据,会报错,所以这时关键字any,some,all就派上用场
b.NOT IN/IN/EXISTS引发的子查询
IN/NOT IN:指定的一个值是否在这个集合
EXISTS:where型子查询(把内层查询结果当作外层查询的比较条件),而exists型子查询(把外层查询结果拿到内层,看内层的查询是否成立
SELECT col_name FROM table_name WHERE col_name IN/NOT IN ()
SELECT col_name FROM table_name WHERE EXISTS ()
(2)连接
合并:
//UNION:去除重复的记录
SELECT * FROM table_name1 UNION SELECT * FROM table_name2
//UNION ALL:不去除重复的记录
SELECT * FROM table_name1 UNION ALL SELECT * FROM table_name2
a.内连接 INNER JOIN/CROSS JOIN/JOIN
SELECT col_name FROM table_name1 INEER JOIN/CROSS JOIN/JOIN table_name2 ON table_name1.col_name = table_name2.col_name
//以上的句子等价于平常的查询语句如下:
SELECT col_name FROM table_name1,table_name2 WHERE table_name1.col_name = table_name2.col_name
b.左右外连接LEFT JOIN/RIGHT JOIN
左连接:以左表(student)为主,左表中的数据行都会显示,右表没有的都会显示NULL。
右连接:以右表(student)为主,右表中的数据行都会显示,左表没有的都会显示NULL。
//左连接
SELECT col_name FROM table_name1 LEFT JOIN table_name2 ON table_name1.col_name = table_name2.col_name
//右连接
SELECT col_name FROM table_name1 RIGHT JOIN table_name2 ON table_name1.col_name = table_name2.col_name
(3)多表操作
//多表更新
UPDATE table_name1 INNER JOIN table_name2 ON table_name1.col_name = table_name2.col_name SET col_name = value(需要更新的语句) WHERE condition
//多表删除
DELETE col_name FROM table_name1 INNER JOIN table_name2 ON table_name1.col_name = table_name2.col_name WHERE condition