-- 登陆数据库mysql -h127.0.0.1 -uroot -p123456;-- 创建数据库create database 数据库名 character set 字符集;-- 创建表create table 表名(字段名称1 字段类型,字段名称2 字段类型);-- 查看表show tables;-- 删除表drop table 表名;drop table if exists 表名;-- 修改表名rename table 旧表名 to 新表名;-- 修改表的字符集alter table 表名 character set 字符集-- 向表中插入数据insert into 表名 (字段名1,字段名2...) values(字段值1,字段值2...);-- 修改表中数据update 表名 set 列名 = 值;update 表名 set 列名 = 值 [where 条件表达式:字段名 = 值 ]/*delete from 表名; 不推荐. 有多少条记录 就执行多少次删除操作. 效率低truncate table 表名: 推荐. 先删除整张表, 然后再重新创建一张一模一样的表. 效率高*/delete from 表名;delete from 表名 [where 字段名 = 值];truncate table 表名;-- 查询表中数据<SELECT * FROM 表名 WHERE 条件 GROUP BY 字段 HAVING 条件 ORDER BY 字段名 LIMIT offset,length;-- 创建用户CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';-- 创建admin2在任何电脑上登陆mysqlCREATE USER 'admin2'@'%' IDENTIFIED BY '123456';-- 给用户授权GRANT 权限 1, 权限 2... ON 数据库名.表名 TO '用户名'@'主机名';GRANT SELECT ON db4.products TO 'admin1'@'localhost';GRANT ALL ON *.* TO 'admin2'@'%';-- 查看权限SHOW GRANTS FOR '用户名'@'主机名';SHOW GRANTS FOR 'root'@'localhost';-- 删除用户DROP USER '用户名'@'主机名';DROP USER 'admin1'@'localhost';-- 数据库备份mysqldump -u 用户名 -p 密码 数据库 > 文件路径-- 导入sql文件source sql文件地址
sql约束
主键:唯一,非空
常见的约束:primary key,unique,not null,foreign key
主键自增:auto_increment
-- 设置自增起始位置 自增从100开始CREATE TABLE emp2(eid INT PRIMARY KEY AUTO_INCREMENT,ename VARCHAR(20),sex CHAR(1))AUTO_INCREMENT=100;
外键约束:外键指的是从表中与主表的主键对应的那个字段,使用外键约束可以让两表之间产生一个对应关系从而保证主从表引用的完整性。
数据库事物
事物:事物是一个整体,有一条或多条sql组成,事物中的sql执行过程中只能执行全部成功或全部失败。
回滚:即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操 作全部撤销,滚回到事务开始时的状态。(在提交之前执行)
提交事物:mysql默认自动提交事物
手动提交事物:
-- 手动提交事物start transaction; # begin;sql语句commit; # rollback;-- 修改自动提交语句SHOW VARIABLES LIKE 'autocommit';SET @@autocommit=off;
事物的四特性:
| 原子性 | 每个事务都是一个整体,不可再拆分,事务中所有的 SQL 语句要么都执行成功, 要么都 失败。 |
|---|---|
| 一致性 | 事务在执行前数据库的状态与执行后数据库的状态保持一致 。 |
| 隔离型 | 事物与事物之间不能相互影响,执行时保持隔离的状态。 |
| 持久性 | 一旦事物执行成功,对数据库的修改是持久的,就算关机也会保存下来。 |
事物隔离级别:
-- 查看隔离级别的命令select @@tx_isolation;-- 设置mysql隔离级别,需要退出mysql再重新登陆才能看到隔离级别的变化set global transaction isolation level 级别名称;read uncommitted 读未提交read committed 读已提交repeatable read 可重复读serializable 串行化
并发访问数据库的问题:

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

-- 在以创建的表中添加普通索引ALTER TABLE 表名 ADD INDEX 索引名 (列名)-- 删除索引ALTER TABLE table_name DROP INDEX index_name;
Mysql视图
视图:是一种虚拟的表,建立在已有表的基础上。
视图的作用:简化多表查询
-- 创建视图create view 视图名 [column_list] as select语句;view: 表示视图column_list: 可选参数,表示属性清单,指定视图中各个属性的名称,默认情况下,与SELECT语句中查询 的属性相同as : 表示视图要执行的操作select语句: 向视图提供数据内容
Mysql存储过程
存储:存储过程是是一组sql的合并,中间加上逻辑控制
-- 编写存储过程DELIMITER $$CREATE PROCEDURE goods_proc()BEGINselect * from goods;END $$DELIMITER $$ -- 声明语句结束符,可以自定义 一般使用$$ CREATE PROCEDURE 过程名称() -- 声明存储过程BEGIN -- 开始编写存储过程END $$ -- 存储过程结束-- 调用call 存储过程名;-- 传递参数CREATE PROCEDURE 存储过程名称(IN 参数名 参数类型)-- 变量赋值SET @变量名=值OUT 变量名 数据类型DELIMITER $$CREATE PROCEDURE orders_proc(IN o_oid INT , IN o_gid INT ,IN o_price INT, OUT out_num INT)BEGIN-- 执行插入操作INSERT INTO orders VALUES(o_oid,o_gid,o_price); -- 设置 num的值为 1SET @out_num = 1;-- 返回 out_num的值SELECT @out_num;END $$-- 调用存储过程插入数据,获取返回值CALL orders_proc(1,2,30,@out_num);
Mysql触发器
触发器:由事件来触发。当我执行sql时,这条sql会触发自动触发sql语句。
-- 创建触发器delimiter $ -- 将Mysql的结束符号从 ; 改为 $,避免执行出现错误 CREATE TRIGGER Trigger_Name -- 触发器名,在一个数据库中触发器名是唯一的 before/after(insert/update/delete) -- 触发的时机 和 监视的事件on table_Name -- 触发器所在的表for each row -- 固定写法 叫做行触发器, 每一行受影响,触发事件都执行 begin-- begin和end之间写触发事件 end$ -- 结束标记
