1. -- 登陆数据库
  2. mysql -h127.0.0.1 -uroot -p123456;
  3. -- 创建数据库
  4. create database 数据库名 character set 字符集;
  5. -- 创建表
  6. create table 表名(
  7. 字段名称1 字段类型,
  8. 字段名称2 字段类型
  9. );
  10. -- 查看表
  11. show tables;
  12. -- 删除表
  13. drop table 表名;
  14. drop table if exists 表名;
  15. -- 修改表名
  16. rename table 旧表名 to 新表名;
  17. -- 修改表的字符集
  18. alter table 表名 character set 字符集
  19. -- 向表中插入数据
  20. insert into 表名 (字段名1,字段名2...) values(字段值1,字段值2...);
  21. -- 修改表中数据
  22. update 表名 set 列名 = 值;
  23. update 表名 set 列名 = [where 条件表达式:字段名 = ]
  24. /*
  25. delete from 表名; 不推荐. 有多少条记录 就执行多少次删除操作. 效率低
  26. truncate table 表名: 推荐. 先删除整张表, 然后再重新创建一张一模一样的表. 效率高
  27. */
  28. delete from 表名;
  29. delete from 表名 [where 字段名 = 值];
  30. truncate table 表名;
  31. -- 查询表中数据
  32. <SELECT * FROM 表名 WHERE 条件 GROUP BY 字段 HAVING 条件 ORDER BY 字段名 LIMIT offsetlength;
  33. -- 创建用户
  34. CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
  35. -- 创建admin2在任何电脑上登陆mysql
  36. CREATE USER 'admin2'@'%' IDENTIFIED BY '123456';
  37. -- 给用户授权
  38. GRANT 权限 1, 权限 2... ON 数据库名.表名 TO '用户名'@'主机名';
  39. GRANT SELECT ON db4.products TO 'admin1'@'localhost';
  40. GRANT ALL ON *.* TO 'admin2'@'%';
  41. -- 查看权限
  42. SHOW GRANTS FOR '用户名'@'主机名';
  43. SHOW GRANTS FOR 'root'@'localhost';
  44. -- 删除用户
  45. DROP USER '用户名'@'主机名';
  46. DROP USER 'admin1'@'localhost';
  47. -- 数据库备份
  48. mysqldump -u 用户名 -p 密码 数据库 > 文件路径
  49. -- 导入sql文件
  50. source sql文件地址

sql约束

主键:唯一,非空
常见的约束:primary key,unique,not null,foreign key
主键自增:auto_increment

  1. -- 设置自增起始位置 自增从100开始
  2. CREATE TABLE emp2(
  3. eid INT PRIMARY KEY AUTO_INCREMENT,
  4. ename VARCHAR(20),
  5. sex CHAR(1)
  6. )AUTO_INCREMENT=100;

外键约束:外键指的是从表中与主表的主键对应的那个字段,使用外键约束可以让两表之间产生一个对应关系从而保证主从表引用的完整性。

数据库事物

事物:事物是一个整体,有一条或多条sql组成,事物中的sql执行过程中只能执行全部成功或全部失败。
回滚:即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操 作全部撤销,滚回到事务开始时的状态。(在提交之前执行)
提交事物:mysql默认自动提交事物
手动提交事物:

  1. -- 手动提交事物
  2. start transaction; # begin;
  3. sql语句
  4. commit; # rollback;
  5. -- 修改自动提交语句
  6. SHOW VARIABLES LIKE 'autocommit';
  7. SET @@autocommit=off;

事物的四特性:

原子性 每个事务都是一个整体,不可再拆分,事务中所有的 SQL 语句要么都执行成功, 要么都 失败。
一致性 事务在执行前数据库的状态与执行后数据库的状态保持一致 。
隔离型 事物与事物之间不能相互影响,执行时保持隔离的状态。
持久性 一旦事物执行成功,对数据库的修改是持久的,就算关机也会保存下来。

事物隔离级别:
image.png

  1. -- 查看隔离级别的命令
  2. select @@tx_isolation;
  3. -- 设置mysql隔离级别,需要退出mysql再重新登陆才能看到隔离级别的变化
  4. set global transaction isolation level 级别名称;
  5. read uncommitted 读未提交
  6. read committed 读已提交
  7. repeatable read 可重复读
  8. serializable 串行化

并发访问数据库的问题:
image.png

数据库范式:
1NF:原子性做到列不可分割
2NF:一张表只能做一件事
3NF:消除传递依赖,表的信息如果能被推到出来就不应该单独设计一个字段。
反三范式:设计冗余字段,提高数据库读性能。

mysql索引

image.png

  1. -- 在以创建的表中添加普通索引
  2. ALTER TABLE 表名 ADD INDEX 索引名 (列名)
  3. -- 删除索引
  4. ALTER TABLE table_name DROP INDEX index_name;

Mysql视图

视图:是一种虚拟的表,建立在已有表的基础上。
视图的作用:简化多表查询

  1. -- 创建视图
  2. create view 视图名 [column_list] as select语句;
  3. view: 表示视图
  4. column_list: 可选参数,表示属性清单,指定视图中各个属性的名称,默认情况下,与SELECT语句中查询 的属性相同
  5. as : 表示视图要执行的操作
  6. select语句: 向视图提供数据内容

Mysql存储过程
存储:存储过程是是一组sql的合并,中间加上逻辑控制

  1. -- 编写存储过程
  2. DELIMITER $$
  3. CREATE PROCEDURE goods_proc()
  4. BEGIN
  5. select * from goods;
  6. END $$
  7. DELIMITER $$ -- 声明语句结束符,可以自定义 一般使用$$ CREATE PROCEDURE 过程名称() -- 声明存储过程
  8. BEGIN -- 开始编写存储过程
  9. END $$ -- 存储过程结束
  10. -- 调用
  11. call 存储过程名;
  12. -- 传递参数
  13. CREATE PROCEDURE 存储过程名称(IN 参数名 参数类型)
  14. -- 变量赋值
  15. SET @变量名=值
  16. OUT 变量名 数据类型
  17. DELIMITER $$
  18. CREATE PROCEDURE orders_proc(IN o_oid INT , IN o_gid INT ,IN o_price INT, OUT out_num INT)
  19. BEGIN
  20. -- 执行插入操作
  21. INSERT INTO orders VALUES(o_oid,o_gid,o_price); -- 设置 num的值为 1
  22. SET @out_num = 1;
  23. -- 返回 out_num的值
  24. SELECT @out_num;
  25. END $$
  26. -- 调用存储过程插入数据,获取返回值
  27. CALL orders_proc(1,2,30,@out_num);

Mysql触发器

触发器:由事件来触发。当我执行sql时,这条sql会触发自动触发sql语句。

  1. -- 创建触发器
  2. delimiter $ -- Mysql的结束符号从 ; 改为 $,避免执行出现错误 CREATE TRIGGER Trigger_Name -- 触发器名,在一个数据库中触发器名是唯一的 before/after(insert/update/delete) -- 触发的时机 监视的事件
  3. on table_Name -- 触发器所在的表
  4. for each row -- 固定写法 叫做行触发器, 每一行受影响,触发事件都执行 begin
  5. -- beginend之间写触发事件 end
  6. $ -- 结束标记