mysql基础(笔记)

专业术语:

  1. 列:字段
  2. 行:一条记录
  3. 主键:主键是唯一的,当指明某一列为主键时,这一列的数据就不能有重复的。
  4. 外键:(补充)
  5. 索引:(补充)

sql的数据分类:

1. ddl数据定义语言

  1. create database 数据库名 character set utf8;//创建一个数据库,后面是字符集编码,可省

  2. alter database 数据库名称 character set 字符集编码名;//修改数据库字符集编码

  3. create table 表名(
    列名1 列的类型 [约束],
    列名2 列的类型 [约束],
    列名3 列的类型 [约束]
    );\最后一行是没有逗号的

  4. alter table 表名 add 列名 数据类型; //增加一列

  5. alter table 表名 modify 字段名 数据类型; //修改表的字段类型

  6. rename table 原始名称 to 要修改成的名称;//修改表名

  7. alter table 表名 character set 字符集名称;//修改字符集

  8. alter table 表名 change 原始列名 新列名 数据类型;//修改列名

  9. desc 表名;//查看表的信息

  10. show create table 表名;//查看表的创建细节(查看建表的语句)

  11. alter table 表名 drop 字段名;//删除一列

  12. drop table 表名;//删除表

2. dml:数据操作语言(增删改)

  1. select * from 表名;//查询表的所有数据
  2. insert into 表名(列名1,列名2……)value (列值1,列值2……);
    注意:列名和列值的类型和个数,顺序要一一对应,值不要超出列定义的长度,日期和字符时都要使用括号括起来,(列名1,列名2……)这个括号可以省略,省略时默认是所有的列。
  3. insert into 表名(列名1,列名2……)values (列值1,列值2……),(列值1,列值2……);//批量插入
  4. update 表名 set 列名1=列值1,列名2=列值2……where 列名=值;//修改列的值,当没有where语句时,修改整个列。当写成列名=列名+1 是在原来的基础之上加一;
  5. 修改密码的命令:alter user ‘root’@‘localhost’ identified by ‘新的密码’;//在命令行里面进入mysql里面改;
  6. 修改密码的方法二:(自带的工具)在命令行里面直接写:mysqladmin -u root -p password ‘新的密码’
  7. delete from 表名 where 列名=值;//删除表的某一行,如果后面没有where语句,就删除整张表
  8. truncate table 表名;//删除所有数据,他们两个的区别:delete删除表中的数据,表还在,truncate 是把表直接drop掉,然后重新创建同样的表,执行速度比delete快。还有就是如果表中有主键的话,delete删除信息后,因为表的结构在,所以主键的值一直在增加,但是truncate有主键的话主键就不会增加,而是重新开始。

3. dql:数据查询语言

  1. select * from 表名;/查询表中的所有数据

  2. select 列名1,列名2……from 表名;//查询指定的列名的数据

  3. 条件查询就是再查询时加上where子句,
    在where子句中可以使用的运算符和关键字有:=(等于),!=(不等于),<>(不等于),<,<=,>,>=,between …and…;值在什么范围,in(set),is null ;(为空),is not null;(不为空),and;(与),or;(或),not;(非)。
    下面时示例:
    1:查询学号是1,2,3的记录:
    方法一:select * from students where id=1 or id=2 or id=3;
    方法二:select * from students id in(1,2,3);
    2:查询年龄在18到20之间的学生记录:
    方法一:select * from students where age >=18 and age<=20;
    方法二:select * from students where age between 18 and 20;

  4. 模糊查询:_代表一个字符,%代表任意多个字母
    1:查询名字由五个字母构成的记录:select * from students where name like ‘_____";//这里是有五个下划线组成的,当只想看名字的这个字段时,将*改成name就行了。
    2:查询名字由五个字母构成并且第五个字母为‘s’的学生记录:select * from students where name like ‘____s";四个_加s
    3:以‘m’开头的记录:select * from students where name like ‘m%’;
    4:第二个字母为‘u’的记录:select * from student where name like ‘_u
    %’;
    5:查询姓名包含’s‘字母的记录:select * from students where name like ’%s%’;

  5. 字段控制查询:
    1:select distinct 列名 from 表名;查询表中的一列,并且去掉重复的记录。
    2:对查询的结果进行运算(必须都是数值型):select *,字段1+字段2 from 表名;
    例如:select *,age+score from students;但是数据中有很多数值是null的,当为null时,想将null改成其他值,可以写成select *,ifnull(age,0)+ifnull(score,0) from students;
    3:上面的查询结果中,出现的新的一列是ifnull(age,0)+ifnull(score,0),这样的名字太难看,我们可以对它进行起别名select *,ifnull(age,0)+ifnull(score,0)as total from students;这样新的一列名字就是total,其实对所有的字段都适合,例如select name as othername from students;那么字段name的名字就改成othername了。

  6. 排序:select * from 表名 order by 列名1 desc,列名2 asc……;//先用列名1进行排序,有相同的再用列名2进行排序。其中asc是升序(默认的),desc是降序;

  7. 聚合函数:
    1:count();统计指定列不为null的记录 。select count(*) from 表名;显示有多少条记录。select count(列名1),count(列名2) from 表名;显示列名1和列名2的记录个数。
    2:max();计算指定列的最大值,字符串按照字符串的顺序运算。select max(字段名),min(字段名) from 表名;分别查最大值和最小值。
    3:min():指定列的最小值,字符串按照字符串的顺序运算
    4:sum();指定列的数值求和,如果指定列不是数值类型,计算结果是0。
    select sum(列名),sum(列名2) from 表名;查询;列名1和列名2的总和分别是多少。select sum(列名1+列名2) from 表名;查询列名1和列名2加起来的总和是多少。
    5:avg();计算平均值,如果指定列不是数值类型,计算结果是0;和sum的用法一样

  8. 分组查询:将查询结果按照一个或者多个字段分组。
    1:select 列名 from 表名 group by 列名(这是分组的依据的一列:例如性别的字段就按照男女来分组); 分组查询和去重查询的结果可能相同,但是两者有区别的,去重查询是去掉重复的给你显示,而分组查询是按照分组依据显示每一组的第一条信息,但是它的每一组还有很多其他的记录。比如:select id,group_concat(‘name’) from students group by gender;这样就会按照男女分组,然后在每一组后面显示男生和女生分别的名字,表示分组之后,根据分组结果,使用group_concat()来放置每一组某字段的的值的集合。
    2:注意事项:使用分组的时候,select后面直接跟的字段一般出现在group by后:select name,gender from students group by gender,name;这样对姓名和性别同时进行分组。
    3:group by和聚合函数联合使用:通过group_conat()启发,我们既然可以统计出每个分组的字段值的集合,那么就可以通过集合函数来对这个值的集合做一些操作:select department ,group_concat(salary),avg(salary) from employee group by department;//这样按照部门进行分类,显示部门的工资,然后求平均值。
    4:having 作用和where一样,但having只能永雨group by,用于分组查询后指定一些条件继续查询:select department,sum(salary) from employee group by department having sum(salary)>9000; //这样查询工资总和大于9000的部门名称和工资和。having是分组后对数据进行筛选,where是分组前对数据进行过滤的,where后面不可以使用聚合函数

  9. 书写顺序:select —>from—>where—>group by—>having—>order by—>limit

  10. 执行顺序: from —>where —>group by—>having—>select—>order by—>limit

  11. limit:从哪一行开始查,总共要查几行,格式是:limit 参数1,参数2 //参数1是指从哪一行开始查,参数2是指一共查几行。这个limit可以使用来做分页,思路如下:
    1:int curpage=1;//当前页
    2:int pagesize=3; //每一页多少数据
    3:当前页是第一页从(1-1)*3=0开始
    4:当前页是第二页从(2-1)*3=3开始
    5:公式:select *from employee limit (curpage-1)*pagesize,pagesize;

4. dcl:数据控制语言

  1. 数据完整性:(保证用户输入的数据是正确的)实体完整性,域完整性,引用完整性
    1:实体完整性:表中一行(一条记录)代表一个实体
    作用:标识每一行的数据不重复,行级约束。
    约束类型:
    一:主键约束(primary key):特点:每个表要有一个主键,数据唯一,且不能为null;添加的方式:
    1:create table 表名(字段1 数据类型 primary key,字段2 数据类型);
    2:create table 表名 (字段1 数据类型,字段2 数据类型, primary key(要设置主键的字段名);第二种方法可以延申成联合主键,联合主键是多个主键的字段相同时才违反联合主键的约束:create table 表名(字段1 数据类型 ,字段2 数据类型 ,primary key (主键1,主键2);
    3:创建表–>再去修改表,添加主键:alter table 表名 add constraint primary key (主键1,主键2);
    二:唯一约束(unique):特点是指定的列的数据不能重复,可以为空。格式:create table 表名 (字段1 数据类型 ,字段2 数据类型 unique);
    三:自动增长列(auto increment):指定的列数据自动增长。格式:create table 表名 (字段1 数据类型 primary key auto_increment,字段2 数据类型 unique);自动增长列即使数据删除,还是从删除的序号继续往下增加。
    2:域完整性:限制单元格的数据正确。
    域完整性约束:1:数据类型:数值类型,日期类型,字符串类型
    2:非空约束(not null):create table 表名 (字典1 数据类型 primary key auto_increment,字段2 数据类型 unique not null);
    3:默认值约束(default):create table 表名 (字段1 数据类型 default 这里写你默认的值);
    3:参照完整性:利用外键建立两张表的关联
    格式一:create table 表名 (列名1 数据类型 ,列名2 数据类型,constraint 外键名 foreing key (本张表的列名) references 要关联的表名(关联表的列名));
    格式二:alter table 表名 add constraint 约束名 foreing key (本张表的列名) references 关联的表名 (关联表的列名);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReflectMirroring

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值