数据库整体使用套路:
-- sql启动的时候要用,不需要密码
sudo mysql -uroot -p
-
-- 使用help查看想要的命令(其中\c用最多,用以清楚已经输入但还没执行的语句)
-
-- 显示已有数据库 show databases; -- 显示已有表 show tables;
-
-- 选用该数据库 use 数据库名;
-
-- 具体显示已有表的定义 show create table Student; --显示表的具体数据项 select* from Student;
-
--看一个表的具体定义 desc 表名;
- 创建模式是authorization而不是authorize,而且后面直接跟用户名,没有on什么的。
数据库创建表的注意事项:
- 不是每一个表都要主键
- foreign key 在列级和在表级的不同表达,在列级只需要references 表名(列),在表级需要在前面加上一个
- foreign key(列名)。!!!注意啊,这里的列名都要加括号。而且要定义多个外码的时候在表级要分开语句,不能用逗号分开(主码是没有表的参照的,所以是可以的)。
- 不在表定义的时候给表添加外键:
- alter table A
- add constraint foreign_key
- foreign key(the_key)
- references B(...)
- 一定要注意reference 的s!
- 对于主码和外键,数据类型必须是相同的,即便是字符串类型的位数也必须是一样的。
- sql语句的注释: 单行--; 多行/**/
- 用自己的某列做外码的话,空表插入数据是不能成功的。
- 比如Course表,如果想要drop掉它的话,要么级联要么先删除掉SC表(因为SC拿它的主码做外码);
数据库增删改:
-- 插入数据,注意values啊
insert into Student(Sno,Sname,Ssex,Sage,Sdept) values("201215122","晨","女",19,"CS");
-- 如果要插入中文字符,则需要改变相应列的编码方式
-- 先改表
alter table Student default character set utf8;
-- 然后改列
alter table Student change Sname Sname varchar(20) character set utf8;
-- 删除表
drop table 表名;
“至少一个,一个以上”是比较能迷惑人的表达——事实上有就可以了。
- 如果是问空值的话,如果一旦判度有多个表的时候就要想外连接的问题。
- 外链接是在from语句的时候就:表1 连接类型 表2 on 链接条件(就像where的一样)。
- 如果是多个表的外连接怎么办? 思想就是把前一个表当作整体。
- 思考方式是先看需要什么表,然后是需要什么列,看列要判断是否要去除重复。
- 插入数据是数据更新的一部分,想要定义格式的话,是在表名的后面搞。
- 数据置值的时候用=,不能用LIKE。
- 如果要给聚集函数命名的话,直接在后面加名字就好,即便是中文也不用加引号。而对于子表,则必须用as跟上命名。
- group by 如果有多个的话,就是按字典序排列。
- 有时候表的属性没法使用聚集函数,并且也无法使用having(因为聚集函数的使用不再分组内),这个时候可以选择在表的选择时使用子查询表,或者在外和热语句里也可以使用,用几层没关系。
- 添加列的时候可以并列,但是要重复用add。
存储过程
- delimiter // 以忽略过程中遇到的 “;”
- 存储过程的参数是要带数据类型的
- IN OUT INOUT参数的作用及使用:https://blog.youkuaiyun.com/u012326462/article/details/83445404