一、概念: 数据: data 数据库: DB 数据库管理系统:DBMS 数据库系统:DBS MySQL:数据库 mysql:客户端命令(用来连接服务或发送sql指令) SQL:结构化查询语言 ,其中MySQL支持这个。 SQL语言分为4个部分:DDL、DML、DQL、DCL 二、连接数据库: mysql -h 主机名 -u 用户名 -p密码 库名 C:\>mysql --采用匿名账号和密码登陆本机服务 C:\>mysql -h localhost -u root -proot --采用root账号和root密码登陆本机服务 C:\>mysql -u root -p --推荐方式默认登陆本机 Enter password: **** C:\>mysql -u root -p lamp61 --直接进入lamp61数据库的方式登陆 三、授权: 格式:grant 允许操作 on 库名.表名 to 账号@来源 identified by '密码'; 实例:创建zhangsan账号,密码123,授权lamp61库下所有表的增/删/改/查数据,来源地不限 mysql> grant select,insert,update,delete on lamp61.* to zhangsan@'%' identified by '123'; Query OK, 0 rows affected (0.00 sec) 四、SQL的基本操作 mysql>show databases; --查看当前用户下的所有数据库 mysql>create database [if not exists] 数据库名; --创建数据库 mysql> use test; --选择进入test数据库 mysql> drop database 数据库名; --删除一个数据库 mysql> show tables; --查看当前库下的所有表格 mysql> select database(); --查看当前所在的数据库 mysql> desc tb1; --查看tb1的表结构。 mysql> create table demo(--创建demo表格 -> name varchar(16) not null, -> age int, -> sex enum('w','m') not null default 'm'); mysql> desc demo; --查看表结构 mysql>\h -- 快捷帮助 mysql>\c -- 取消命令输入 mysql>\s -- 查看当前数据库的状态 mysql>\q -- 退出mysql命令行 mysql>quit 退出 五、MySQL数据库的数据类型: MySQL的数据类型分为四大类:数值类型、字串类型、日期类型、NULL。 1、 数值类型: *tinyint(1字节) smallint(2字节) mediumint(3字节) *int(4字节) bigint(8字节) *float(4字节) float(6,2)* double(8字节) decimal(自定义)字串形数值 2、字串类型 普通字串 *char 定长字串 char(8) *varchar 可变字串 varchar(8) 二进制类型 tinyblob blob mediumblob longblob 文本类型 tinytext *text 常用于<textarea></textarea> mediumtext longtext *enum枚举 set集合 5.3 时间和日期类型: date 年月日 time 时分秒 datetime 年月日时分秒 timestamp 时间戳 year 年 5.4 NULL值 NULL意味着“没有值”或“未知值” 可以测试某个值是否为NULL 不能对NULL值进行算术计算 对NULL值进行算术运算,其结果还是NULL 0或NULL都意味着假,其余值都意味着真 MySQL的运算符: 算术运算符:+ - * / % 比较运算符:= > < >= <= <> != 数据库特有的比较:in,not in, is null,is not null,like, between and 逻辑运算符:and or not 六、表的字段约束: unsigned 无符号(正数) zerofill 前导零填充 auto_increment 自增 default 默认值 not null 非空 PRIMARY KEY 主键 (非null并不重复) unique 唯一性 (可以为null但不重复) index 常规索引 设置typeid为type表中的id的外键///typeid int references type(id), 七: 建表语句格式: create table 表名( 字段名 类型 [字段约束], 字段名 类型 [字段约束], 字段名 类型 [字段约束], ... ); 1.进入数据库:c:\> mysql -u root -p 2.创建数据库:mysql> create database ~库名~; 3.进入数据库:mysql> use ~库名~; 4.查看当前在哪个库:mysql> select database(); 5.创建表: --普通创建:create table ~ 表名~(表内容); -- 通过多行创建表: mysql> create table ~表名~( -> id int, -> name varchar(8), -> age tinyint -> ); 6.查看表结构///desc ~表名~; 7.尝试删除表///drop table if exists ~表名~; 8.查看表的建表语句///mysql> show create table~表名~\G; -------------------------===添加 insert===----------- --标准添加,指定所有字段给定所有的值///mysql> insert into ~表名~(id,name,age) value(1,'zhangsan',20); -- 不指定字段添加值,注意:字段顺序和表结构一致///mysql> insert into ~表名~ value(2,"lisi",22); -- 指定部分字段,添加值///mysql> insert into ~表名~(id,name) value(3,"wangwu"); -- 查看学生信息表的同时,追加一个beijing值的字段,字段名为city(城市)///mysql> select *,"beijing" city from ~表名~; -- 在表的第一列位置添加字段/// alter table 表名 add 字段名 类型 约束 first;(如不加此first默认在最后添加) -- 给表字段添加索引///alter table 表名 add index 字段名_index(字段名); ------------------------===查看 select===----------- --查看所有数据库/// show databases; --查看数据库中所有表/// show tables; --查看表中的所有数据///mysql> select * from ~表名~; -- 查看~表名~标的部分字段的数据///mysql> select name,age,classid from ~表名~; -- 查看部分字段 ,并为name字段起个别名,叫username字段名 ///mysql> select name as username,age,classid from ~表名~; -- 查看年龄以及5年后的年龄///mysql> select age,age+5 from ~表名~; -- 按年龄升序排序,取第一条,并显示 : mysql> select * from ~表名~ order by age asc limit 1; -- 查看学生信息表的同时,追加一个beijing值的字段,字段名为city(城市) ///mysql> select *,"beijing" city from ~表名~; -- 通过表名取字段信息///mysql> select s.name,s.age from ~表名~ s; --- where条件查询---- ==================================================================== -- 1. 查看lamp97班级的所有学生信息///mysql> select * from ~表名~ where classid='lamp97'; -- 2. 查看lamp97期性别为m的所有学生信息///mysql> select * from ~表名~ where classid='lamp97' and sex='m'; -- 3. 查看年龄age是20~30岁的学生信息 mysql> select * from ~表名~ where age>=20 and age<=30; mysql> select * from ~表名~ where age between 20 and 30; -- 4. 查看年龄age是20~30岁之外的学生信息 mysql> select * from ~表名~ where age<20 or age>30; mysql> select * from ~表名~ where age not between 20 and 30; -- 5. 查看id号为3,5,8,10的学生信息 mysql> select * from ~表名 ~ where id=3 or id=5 or id=8 or id=10; mysql> select * from ~表名~ where id in(3,5,8,10); -- 6. 查看lamp97期和lamp98期性别为w的信息 mysql> select * from ~表名~ where classid in('lamp97','lamp98') and sex='w'; mysql> select * from ~表名~ where (classid='lamp97' or classid='lamp98') and sex='w'; -- 7. 查看姓名中包含ang字串的学生信息 mysql> select * from ~表名~ where name like '%ang%'; mysql> select * from ~表名~ where name regexp "ang"; --使用正则 -- 8. 查看年龄为偶数,并且性别为m的学生信息///mysql> select * from ~表名~ where age%2=0 and sex='m'; -- 9. 查看姓名为4个任意字符的学生信息 mysql> select * from ~表名~ where name like '____'; mysql> select * from ~表名~ where name regexp '^.{4}$'; --10. 查看姓名不为null的信息。///mysql> select * from ~表名~ where name is not null; --- 统计查询(聚合查询): count() sum() avg() max() min(); -- 统计学生表的数据条数 mysql> select count(id) from ~表名~; mysql> select count(*) from ~表名~; -- 分组,按班级分组//mysql> select classid from ~表名~ group by classid; -- 统计每个班级的人数和平均年龄。 ///mysql> select classid,count(*),avg(age) from ~表名~ group by classid; -- 统计学生信息表中男女生各自人数(按性别分组)。 ///mysql> select sex,count(*) from ~表名~ group by sex; -- 统计lamp97期的按性别分组后的人数 ///mysql> select sex,count(*) from ~表名~ where classid='lamp97' group by sex; -- 统计每个班的男女生各自人数(按性别分组)。 ///mysql> select classid,sex,count(*) from ~表名~ group by classid,sex; -- 统计每个班的平均年龄,要求只显示24岁以上的班级。 ///mysql> select classid,avg(age) from ~表名~ group by classid having avg(age)>24; -- 排序:order by 字段名 [asc|desc] -- 默认asc(升序) desc(降序) -- 查询所有数据 并按年龄做默认升序排序///mysql> select * from ~表名~ order by age; -- 查询所有数据 并按年龄做默认升序排序///mysql> select * from ~表名~ order by age asc; -- 查询所有数据 并按年龄降序排序///mysql> select * from ~表名~ order by age desc; -- 按班级升序,相同的班级按年龄降序排序。///mysql> select * from ~表名~ order by classid asc,age desc; -- limit 子句:(分页) --=============================================================== -- 提取前4条数据////mysql> select * from ~表名~ limit 4; -- 排除前4条,取3条///mysql> select * from ~表名~ limit 4,3; -- limit后面的数值不可以为负数。////mysql> select * from ~表名~ limit 60,-3; -- 统计每个班级的人数,并按人数从大到小排序,只取前两条。 ////mysql> select classid,count(*) num from ~表名~ group by classid order by num desc limit 2;写到这儿 -- 查询id为7的下一条数据////mysql> select * from ~表名~ where id>7 order by id limit 1; --================================================================ -- 组合查询(多表查询) -- 1. 嵌套查询 -- 2. where 关联查询 -- 3. join 连接 (左联 left join、右联 right join、内联inner join) --================================================================= -- 最大年龄//// mysql> select max(age) from ~表名~; -- 查询年龄为36岁的人//// mysql> select * from ~表名~ where age=36; -- 查询年龄最大的学生信息////mysql> select * from ~表名~ where age=(select max(age) from ~表名~); -- 查询php成绩最高的学生id号////mysql> select sid from grade where php=(select max(php) from grade); -- 查出php成绩最高的学生信息 mysql> select * from ~表名~ where id in( -> select sid from grade where php=(select max(php) from grade)); -- 查询所有字段,条件是学生的id和成绩的sid关联//// mysql> select * from ~表名1~,~表名2~ where ~表名~.id=~表名1~.sid; -- 查询部分字段,条件是学生的id和成绩的sid关联 //// mysql> select ~表名~.id,~表名~.name,~表名~.age,grade.php,grade.mysql from ~表名~,grade where ~表名~.id=grade.sid; -- 通过别名方式查询部分字段,条件是学生的id和成绩的sid关联 ////mysql> select s.id,s.name,s.age,g.php,g.mysql from ~表名~ s,grade g where s.id =g.sid; -- 左联查询:查询学生表中所有的成绩,没有参加考试的补空 mysql> select s.id,s.name,s.sex,g.php,g.mysql from ~表名~ s left join grade g -> on s.id=g.sid; -- 内联相当于where关联,就是学生表和成绩表共有的数据。 mysql> select s.id,s.name,s.sex,g.php,g.mysql from ~表名~ s inner join grade g -> on s.id=g.sid; 11.修改:--------------------------===修改 update===------------ --修改id值为3的年龄信息为25///mysql> update ~表名~ set age=25 where id=3; -- 修改id值为5的年龄26,名字为qq ///mysql> update ~表名~ set age=26,name='qq' where id=5; (-- 修改一个不存在的数据,不会报错。mysql> update ~表名~ set age=100 where id>50;) -- 将id值为10的~表名~信息中的name改为qq,sex改为w/// mysql> update ~表名~ set name='qq',sex='w' where id=10; -- 修改年龄最小的一条的性别信息/// mysql> update ~表名~ set sex='m' order by age asc limit 1; -- 改名其中为name起别名的as关键字可以省略不用写///mysql> select name username,age,classid from ~表名~; -- 为age+5起个别名age5(对外的字段名)///mysql> select age,age+5 age5 from ~表名~; -- 修改demo1表结构,为m字段添加一个前导补零(先进入表格mysql> desc demo1;),m m表示没有改字段名////mysql> alter table demo1 change m m int(5) unsigned zerofill; 12.删除:-------------------------===删除 delete===------------ -- 删除name值为~名 的数据/// mysql> delete from ~表名~ where name='~名'; -- 删除id值为100到200的数据 ///mysql> delete from ~表名~ where id>=100 and id<=200; -- 删除id值为10,11和20的数据 /// mysql> delete from ~表名~ where id in(10,11,20); -- 删除id值大于100的信息///mysql> delete from ~表名~ where id>100; -- 删除age大于等于50并且小于等于100的数据///mysql> delete from ~表名~ where age>=50 && age<=100; -- 删除age比10小的或比100大的///mysql> delete from ~表名~ where age<10 || age>100; -- 使用关键字distinct 去除重复的classid值///mysql> select distinct classid from ~表名~; -- 删除字段。/// alter table 表名 drop 字段名; 13-- 导出lamp97数据库并以lamp97.sql文件存储 -- 导出数据库lamp138信息 mysql>quit D:\>mysqldump -u root -p lamp138 > lamp138.sql Enter password: -- 导出lamp138数据库中的stu表信息 D:\>mysqldump -u root -p lamp138 stu > lamp138_stu.sql Enter password: -- 导入数据 D:\>mysql -u root -p lamp138 < lamp138.sql Enter password: |
|