赞
踩
1、SQL命令 1、create:创建 1、数据库 create database [if not exists] 数据库名 [character set 'utf8mb4'] []代表可选内容,<>代表必填内容,#和--代表注释 有用到保留字命名表或行可用 ` 表头` 来查询 # SQL语法大小写不区分 2、alter:修改 [alter database 数据库名 [character set 'utf-8'] ] 3、drop:删除 [drop database [if exists] 数据库名 ] 2、建表
- create table 表名(
- 列名 数据类型 约束,
- 列名 数据类型 约束
- )[engine = engine_name | [default] character set charset_name];
# engine是数据表的引擎;innodb,mysiam # charset_name:utf, GBK 约束,可以保证表里面的数据符号的数据完整性要求 1、 主键的定义 [primary key,表示主键] 如果要使用多个字段作为主键:在定义表的最后一行,使用:primary key(字段1,字段2,...) 添加主键约束 [alter table 表名 add primary key(字段名)] 2、非空约束 将一个字段定义为非空 not null。 [字段名 类型 not null,] alter table student modify 字段名 varchar(20) not null, 3、默认值约束 该字段没有给值,就会使用默认值 [字段名 类型 default 默认值]
- create table student(
- id int primary key,
- name varchar(20) not null default 'tester' # 使用默认值
- )
[alter table student modify 字段名 varchar(20) not null default 'tester';] 4、自增长约束 字段的值自动递增 [字段名 类型 auto_increment] 一张表中只能有一个自增长约束 自增长字段的类型必须是整数,可以和primary key合用 [alter table student modify 字段名 int auto_increment primary key;] 5、唯一约束 使字段的值保持唯一,于同列其他值区分 [字段名 类型 unique] 6、检查约束 检查某一列的值,是否是自己规定的值,如果不是抛出异常 [字段名 set(值1,值2,...)] 或 [字段名 enum(值1,值2,...)]
- alter table student modify cardid unique
- alter table student modify sex set (男, 女)
7、外键约束 1、把从表和主表进行映射关联的一个纽带 主表的主键发生变化的时候,这个变化要满足外键的限制才能执行成功 约束的行为:1、删除 2、修改 约束的方式: 1、禁止主表对主键进行删除或修改:restrict,no action(innodb) 2、从表的外键跟随主表的主键同步变化:cascade 3、把从表的外键设置为空:set null,这个外键不能有非空约束 实现: # 1、建表的时候创建外键 [foreign key (外键名) references 主表名(主键) [on update |delete cascade|restrict|set null|no action]] # 2、数据表建好补充外键 [alter table 从表 add constraint 外键名称 foreign key(外键名) references 主表名(主键) [on update |delete cascade|restrict|set null|no action]] 如果不写 3、SQL:查询语言 1、insert新增 [insert into 表名([字段列表]) values(<值列表>)]每次插入一行记录 [insert into 表名([字段列表]) values(<值列表>,<值列表>,<值列表>)...]一次插入多行记录
insert into student (sname,sex,sage,cardid) values('张三','男',18,'54545555');
2、update修改 [update 表名 set 字段名=值 字段名=值...(where字句)] 如果where字句不加,就会更新整个表的数据,一定要加,避免数据破坏 3、delete删除 [delete from 表明 (where字句)] 注意:删除是以行为单位,如果不加where子句限制,整个表删除 delete一旦执行提交,则无法恢复数据 4、where子句 用来筛选数据 [where 条件表达式 and|or 条件表达式...] 4、数据控制语言 1、给指定用户赋权 [grant 权限名1,权限名2,... on 数据库名.对象名 to '用户名' @'允许其登陆的地址' identified by '密码';] 权限列表:select,insert all所有权限 *.*:所有的库及所有的对象 grant all privilege on *.* to 'root'@'%' identified by '123456' with grant option; 将所有权限给root用户,在任何地址可以登录服务器,使用密码为123456 flush privileges;刷新权限 5、三范式 1、范式 数据库查询语言 单表查询: select <字段列表> from <数据源> [where 字句] [group by 字段名] [having 条件表达式] [order by 字段名 ASC|DESC] [limit x,y] 2、模糊查询 [字段名 like 表达式] 表达式:''%key_' %:通配符,代表任意个字符 _:代表任一字符 3、排序 [order by 字段名1 asc(升序)|desc(降序), 字段名 asc|desc...] 多字段排序先按前面的字段进行排序,如果有相同的数据再按照后面字段进行排序 4、别名 [select 字段名 as 别名,字段名 别名 from 表名 as 别名 | 表名 别名;] 5、范围查询 [select * from table where 字段名 >= 值 and 字段名 <= 最大值] 6、集合操作 [select * from table where 字段名 in|not in (值列表)] 7、分页查询 [select * from table limit x,y;] 8、去重 对重复行进行去除,只保留一行记录 [select distinct * from table] 对记录去重 [select count(distinct 字段名) from table] 对某个字段去重再计算 6、聚合查询 1、聚合函数 count():统计记录数 sum():对指定的字段进行求和 max():求最大值 min():求最小值 avg():求平均值 2、使用聚合函数统计结果 select round(avg(score),0) 平均分 from score; 如果字段的值是NULL,统计的时候往往会忽略,为了使不统计疏漏,需使用ifnull函数 ifnull(字段的值,i):如果字段的值为NULL,则使用i来代替, 这个函数再count和avg中最有用 3、分组查询 [select 聚合函数 from table group by 字段名;] 统计平均分超过75分的学生学号和平均分 select sid,round(avg(score),0) avgscore from score group by sid having avgscore > 75 7、多表查询 1、内连接:两张表通过主外键关系——对应进行连接,也成为全连接 [select * from table1 inner join table2 on table1.pk=table2.fk] 或[select * from table1, table2 where table1.pk=table2.fk] 2、左外连接 [select * from table1 left join table2 on table1.pk=table2.fk] 以左表的数据为主,游标匹配上的数据就显示数据,没有匹配上的数据就显示NULL 3、右外连接 [select * from table1 right join table2 on table1.pk=table2.fk] 8、子查询 1、all [select * from table1 where degree>all(select degree from table2 where sid=18)] 针对all的运算只有 > 或 < 2、any 和任意值进行比较 [select * from table1 where degree > any(select degree from table2 where sid=18)] 3、in [select * from student_info where fk_class_id in (select id from class_info where class_name like 'J%');] IN操作符执行顺序 先查询子表的表,再将内表和外表做一个笛卡尔积,使用 where 条件进行筛选 4、exists [select * from student_info as s where exists (select id from class_info as c where c.id=s.fk_class_id and c.class_name like 'J%' );] 先查主表(外表),将外表中的数据带入到子查询当中,判断子查询返回True或False,如果返回True,则将外表查询到的数返回结果集中,将集中数据返回给用户 内表比较多的时候,exists效率更高 select 9、组合查询 union | union all 用于连接两个以上的select语句的结果组合到一个结果集合中
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。