创建表设定主键:
create table tablename1(
id int auto_increment primary key ,
name char(32)
);
⼦查询(嵌套sql)
Alter :
1:删除列
ALTER TABLE 【表名字】 DROP 【列名称】
2:增加列
ALTER TABLE 【表名字】 ADD 【列名称】 INT NOT NULL
3:修改列的类型信息
ALTER TABLE 【表名字】 CHANGE 【列名称】【新列名称(这里可以用和原来列同名即可)】 BIGINT NOT NULL
4:重命名列
ALTER TABLE 【表名字】 CHANGE 【列名称】【新列名称】 BIGINT NOT NULL
5:重命名表
ALTER TABLE 【表名字】 RENAME 【表新名字】
6:删除表中主键
Alter TABLE 【表名字】 drop primary key
7:添加主键
ALTER TABLE 表明 ADD PRIMARY KEY (resid,resfromid)
8:添加索引
ALTER TABLE 表明 add index INDEX_NAME (name);
9: 添加唯一限制条件索引
ALTER TABLE 表名 charges add unique emp_name2(cardnumber);
10: 删除索引
alter table tablename drop index emp_name;
join:
内连接INNER JOIN是最常用的连接操作。从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录。
左连接LEFT JOIN的含义就是求两个表的交集外加左表剩下的数据。依旧从笛卡尔积的角度讲,就是先从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表中剩余的记录, 赋值为NULL
外连接就是求两个集合的并集。从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表中剩余的记录,最后加上右表中剩余的记录
日期:
now():当前具体的时间和日期
curdate():当前日期
curtime():当前时间
举例:
select year( now( ) ) - sage
也可以select now( )
格式化日期:
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s') 2018-08-30 09:51:45
获取明天、昨天
当前时间 是8月30日
SELECT date_sub(CURDATE(),interval -1 day) 2018-08-31
SELECT date_sub(CURDATE(),interval 1 day) 2018-08-29
获取上一个月 下一个月
SELECT date_sub(CURDATE(),interval 1 month) 2018-07-30
SELECT date_sub(CURDATE(),interval -1 month) 2018-09-30
时间计算差值(来计算精确年龄)
TIMESTAMPDIFF(year,开始时间,'结束时间(当前));
他可以返回一个 差值
MySQL事务:
DDL:定义语句(建库,建表,修改表,索引操作,存储过程,视图)
DDL都是隐式提交
\d // 修改MySQL默认的语句结尾符 ; ,改为 // 。
create procedure 创建语句 BEGIN 和 END 语句⽤来限定存储过程体 -- 定义存储过程 \d // create procedure p1() begin set @i= 10 ; while @i< 90 do insert into users values ( null ,concat( 'user:' ,@i),@i, 0 ); set @i=@i+ 1 ; end while; end; // 执⾏储存 call p1() 查看存储过程 show create procedure p1\G 删除存储过程 drop procedure p1如果你想要某条语句(或某些语句)在事件发⽣时⾃动执⾏,怎么办呢?
触发器的定义 触发器是 MySQL 响应写操作 ( 增、删、改 ) ⽽⾃动执⾏的⼀条或⼀组定义在 BEGIN 和 END 之间的 MySQL 语句 或可理解为:提前定义好⼀个或⼀组操作 , 在指定的 SQL 操作前或后来触发指定的 SQL ⾃动执⾏ 触发器就像是 JavaScript 中的事件⼀样 举例 : 定义⼀个 update 语句 , 在向某个表中执⾏ insert 添加语句时来触发执⾏ , 就可以使⽤触发器 触发器语法 : CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt 说明: # trigger_name :触发器名称 # trigger_time: 触发时间,可取值: BEFORE 或 AFTER # trigger_event :触发事件,可取值: INSERT 、 UPDATE 或 DELETE 。 # tb1_name :指定在哪个表上 # trigger_stmt :触发处理 SQL 语句。 -- 查看所有的 触发器 show triggers\G; -- 删除触发器 drop trigger trigger_name; 触发器 Demo 注意 : 如果触发器中 SQL 有语法错误 , 那么整个操作都会报错 -- 创建⼀个删除的触发器 , 在 users 表中删除数据之前 , 往 del_users 表中添加⼀个数据 -- 1, 复制当前的⼀个表结构 create table del_users like users; -- 2, 创建 删除触发器 注意在创建删除触发器时 , 只能在删除之前才能获取到 old( 之前的 ) 数据 \d // create trigger deluser before delete on users for each row begin insert into del_users values (old .id ,old .name ,old .age ,old .account ); end; // \d ; -- 3 删除 users 表中的数据去实验 tips : 在 INSERT 触发器代码内,可引⽤⼀个名为 NEW 的虚拟表,访问被 插⼊的⾏ ; 在 DELETE 触发器代码内,可以引⽤⼀个名为 OLD 的虚拟表,访问被删除的⾏ ; OLD 中的值全都是只读的,不能更新。 在 AFTER DELETE 的触发器中⽆法获取 OLD 虚拟表 在 UPDATE 触发器代码中 可以引⽤⼀个名为OLD 的 虚拟表 访问更新以前的值 可以引⽤⼀个名为NEW 的虚拟表 访问新 更新的值;什么是视图?
视图是虚拟的表。与包含数据的表不⼀样,视图只包含使⽤时动态检索数据的查询。 视图仅仅是⽤来查看存储在别处的数据的⼀种设施或⽅法。 视图本身不包含数据,因此它们返回的数据是从其他表中检索出来的。 在添加或更改这些表中的数据时,视图将返回改变过的数据。 视图的作⽤ 1. 重⽤ SQL 语句。 2. 简化复杂的 SQL 操作。在编写查询后,可以⽅便地重⽤它⽽不必知道它的基本查询细节。 3. 使⽤表的组成部分⽽不是整个表。 4. 保护数据。可以给⽤户授予表的特定部分的访问权限⽽不是整个表的访问权限。 5. 更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。 6. 注意 : 视图不能索引,也不能有关联的触发器或默认值。 视图的基础语法 创建视图: create view v_users as select id,name,age from users where age >= 25 and age <= 35; -- Query OK, 0 rows affected (0.00 sec) ALTER VIEW CREATE VIEW DROP VIEW 查看当前库中所有的视图 show tables; -- 可以查看到所有的表和视图 show table status where comment= 'view' ; -- 只查看当前库中的所有视图 删除视图 v_t1: mysql> drop view v_t1;索引是存储引擎用于快速找到记录的一种数据结构.
减少查询需要扫描的数据量(加快了查询速度)
减少服务器的排序操作和创建临时表的操作(加快了groupby和orderby等操作)
将服务器的随机IO变为顺序IO(加快查询速度).索引占用磁盘或者内存空间
减慢了插入更新操作的速度
B-树索引/B+树索引
哈希索引
空间数据索引全文索引
B+树是B-树的进阶版本,在B-树的基础上又做了如下的限制:
每个中间节点不保存数据,只用来索引,也就意味着所有非叶子节点的值都被保存了一份在叶子节点中.叶子节点之间根据自身的顺序进行了链接.这样可以带来什么好处呢?
中间节点不保存数据,那么就可以保存更多的索引,减少数据库磁盘IO的次数.因为中间节点不保存数据,所以每一次的查找都会命中到叶子节点,而叶子节点是处在同一层的,因此查询的性能更加的稳定.所有的叶子节点按顺序链接成了链表,因此可以方便的话进行范围查询.⽽MyISAM的索引⽅案虽然也使⽤树形结构,但 是却将索引和数据分开存储:
所以在MyISAM中所有的索引都是⾮聚簇索引,也叫⼆级索引
CaesarChang张旭 认证博客专家 Spring Spring Boot Java 曾就职于苏宁,爱奇艺等公司,擅长java后端开发,拥有多年项目经验和教学经验;在多个大型企业级项目中担任过重要角色。教学风格严谨而又不失幽默,注重培养学员的自主学习和解决问题的能力,授课得到学员的高度认可。