常见使用:
--链接本地数据库
mysql -uroot -p;
--修改密码
mysqladmin -uroot -proot password 新密码
--退出数据库
quit;
--创建数据库
create database `student`;
--查看
show databases;
--差指定库
show create database `student`;
--使用(切换)数据库
use `student`;
--删除数据库
drop database `student`;
--创建表(学员表)
create table `comment`
--查看数据库下的表
show tables;
--删除表
drop table `student`;
--查看表结构
desc `student`;
--查看表数据
selest * from `student`;
--插入数据
insert into `student`(`name`, `age`, `gender`, `height`) value('zhangsan', 18, '男', 1.75);
--插入多条数据
insert into `person` values(1,'铁锤妹子','18879212345',18),(2,'石榴','18179792323',19);
字段类型:
--comment 字段说明
--需要在数据类型右边加上无符号关键字unsigned
--整数类型 --无符号取值范围 --有符号取值范围 --字节
tinyint --取值范围0 ~ 255 --取值范围-128 ~ 127 --1
smallint --取值范围0 ~ 65535 --取值范围-32768 ~ 32767 --2
mediumint --取值范围0 ~ 16777215 --取值范围-8388608 ~ 8388607 --3
int --取值范围0 ~ 4294967295 --取值范围-2147483648 ~ 2147483647 --4
bigint --取值范围0 ~ 18446744073709551615 --取值范围-9223372036854775808 ~ 922337203685775807 --8
--浮点数
float(5,2) --5个数 2个小数点 四舍五入
double(5,2) --
--定点类型
decimal( )定点数以字符串形式存储,在对精度要求比较高的时候(如货币、科学数据),
使用 decimal 的类型比较好,两个浮点数进行减法和比较运算时也容易出问题
--字符串类型
char() --
varchar(n) --1~n之间的字符个数 65535
--枚举类型
enum('a', 'b', 'c') --单选 性别 男 女 最多选65535值
set() --最多选64值 多选 例如爱好
--日期
year --单字节类型 ‘年’
-- (1)使用4位字符串或数字表示;值范围1901~2155
-- (2)使用两位字符串表示:‘00’~ ‘99’
-- 00~69 会转换2000~2069
-- 70~99 会转换1970~1999
-- (3)使用两位数字1~99
-- 1~69 会转换 2001~2069
-- 70~99 会转换1970~1999
time --类型用于只需要时间信息的值,在存储时需要 3 个字节。
--格式为 hh:mm:ss。hh 表示小时,mm 表示分钟,ss 表示秒。
Date --类型用于仅需要日期值时,没有时间部分,在存储时需要 3 个字节。
--日期格式为 'yyyy-mm-dd',其中 yyyy 表示年,mm 表示月,dd 表示日。
timestamp --时间戳
datetime --类型用于需要同时包含日期和时间信息的值,在存储时需要 8 个字节。
--日期格式为 'yyyy-mm-dd hh:mm:ss',其中 yyyy 表示年,mm 表示月,
--dd 表示日,hh 表示小时,mm 表示分钟,ss 表示秒。取值范围为 '1000-01-01 00:00:00'~'9999-12-3 23:59:59'。
基本语句:
AFTER 在某个字段后面
after sex;
FIRST 放在表的最前面
first sex;
--给数据表重命名
alter table `旧表名` rename `新表名`;
alter table `stu` rename `student`;
--修改表选项
alter table `表名` 表选项=值;
alter table `student` charset=gbk;
--新增字段
ALTER TABLE 表名 ADD 字段名 字段类型;
alter table `student` add `add_time` timestamp;
--调整字段位置(排序)
ALTER TABLE 表名 MODIFY 字段名 [字段类型 字段属性];
alter table `stu` modify `phone` char(11);
--字段重命名
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 字段类型 [字段属性];
alter table `student` change `phone` `nnn` char(11);
--修改字段
ALTER TABLE 表名 MODIFY 字段名 新字段类型 [字段属性];
alter table `student` modify `phone` char(11);
--删除字段
ALTER TABLE 表名 DROP 字段名;
alter table `student` drop `phone`;
约束:
--唯一约束 唯一性 类似手机号码 id
unique
`account` char(11) unique comment '登录账户手机';
--非空约束 默认null 不能留空
not null
`gender` enum('男','女','保密') not null default '保密' comment '性别',
--默认值约束 默认有值
default
`gender` enum('男','女','保密') not null default '保密' comment '性别',
--自增约束 类型++
auto_increment;
`id` int primary key auto_increment;
--主键约束 唯一性才能做主键 最好使用id为主键
primary key;
primary key (`id`);
练习sql:
--所有字段添加数据
INSERT INTO 表名 VALUES('…', '…', '…', '…');
insert into `num` values
--为部分字段添加数据
INSERT INTO 表名(字段名1, 字段名2, 字段名3 ……) VALUES('值1', '值2', '值3' ……);
insert into `person` (`name`,`phone`) value('铁锤妹子','18879212345');
--批量插入
INSERT INTO 表名(字段名1) VALUES(值1), (值1) ,(值1);
insert into `person` values(1,'铁锤妹子','18879212345',18),(2,'石榴','18179792323',19);
--修改表数据(条件)
UPDATE 表名 SET 字段名=值1,[字段名=值2] [WHERE 字段=值];
update `employee` set `gender`='女' where `name`='李四';
--删除数据
DELETE FROM 表名 [WHERE 字段名=值];
delete from `employee` where `name`='张三';
-- 1.查询出部门编号为30的所有员工
SELECT * FROM 表名 [WHERE 字段名=值];
select * from `staff` where `deptno`=30;
-- 2. 所有销售员的姓名、编号和部门编号。
select `empno`,`ename`,`deptno` from `staff` `job`='销售员';
-- 3. 找出奖金高于工资的员工。
select * from `staff` where `comm`>`sal`;
-- 4. 找出奖金高于工资60%的员工。
select * from `staff` where `comm`>`sal`*0.6;
-- 5. 找出部门编号为10中所有经理, 和部门编号为20中所有销售员的详细资料。
select * from `staff` where (`deptno`=10 and `job`='经理') or (`deptno`=20 and `job`='销售员');
or --或 两边对一个
and --且 两边都对
-- 6. 找出部门编号为10中所有经理, 部门编号为20中所有销售员, 还有即不是经理又不是销售员但其工资大或等于20000的所有员工详细资料。
select * from `staff` where (`deptno`=10 and `job`='经理') or (`deptno`=20 and `job`='销售员') or (`job` not in('经理','销售员') and `sal`>=20000);
-- 7. 无奖金或奖金低于1000的员工。
select * from `staff` where `comm` is null or `comm`<1000;
-- 8. 查询名字由三个字组成的员工。length()函数或模糊查询
select * from `staff` where `ename` like '___';
select * from `staff` where length(`ename`) = 9;
-- 9. 查询2000年入职的员工。
select * from `staff` where `hiredate` like '2000-%';
select * from `staff` where `hiredate` BETWEEN '2000-01-01' and '2000-12-31';
like --模糊查询
-- 10. 查询所有员工详细信息,用编号升序排序
select * from `staff` order by `mgr`;
-- 11. 查询所有员工详细信息,用工资降序排序,如果工资相同使用入职日期升序排序
select * from `staff` order by `sal` desc,`hiredate`;
一些sql函数:
--函数
-- 1、求和
sum()
select sum(numm) from `strff`;
-- 2、计数
count()
-- 3、最大、最小值
max() min()
-- 4、求平均数
avg()
-- HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
having
-- 查询存在的
in
-- 查询不存在的
not in
-- 查询长度
char_length(name)=4
select * from emp where id not between 3 and 6;
not between --不要3 ~ 6
between --只要3 ~ 6
-- 对有重复的展示数据进行去重操作
distinct
limit 5; -- 单个数字5代表从最前面开始显示5条
limit 2,6; -- 从起始行数为2开始往后显示6行,这里不包含其实行数2。
-- 默认升序 asc 倒序 desc
order by
sql链表:
-- 交叉链接 又称 笛卡尔积
select 字段 from 表1 cross join 表2 [where 子句]
-- 或
select 字段 from 表1,表2 [where 子句]
-- 一般情况下不建议使用交叉连接
-- 内连接
select 字段名 from 表1 inner join 表2 on 子句
-- 外连接
-- 左连接
select 字段名 from 表1 left join 表2 on 子句
-- 右链接
select 字段名 from 表1 right join 表2 on 子句
-- 合并查询
SELECT course_name FROM `dc_course` where id < 3 or course_name='PHP';
union 合并
-- 子查询
-- 嵌套查询使用运算符去判断(查询可以作为条件用括号包裹起来)不推荐使用 性能比价差