node -cmd 窗口下怎么进入
mysql.exe -h127.0.1 -p3306 -uroot -p
mysql -uroot<拖拽文件
mysql -uroot
1.SQL命令
(1)插入数据
insert into 表名称 values(...);
例如:insert into emp values(......);
(2)删除数据
delete from 表名称 where 条件;
例如:delete from emp where eid=7;
(3)修改数据
update 表名称 set 列名称='值', 列名称='值' where 条件;
例如:update emp set ename='涛',sex=0 where eid=3;
(4)查新数据
select * from 表名称;
例如:select * from emp;
(5)使用数据库和使用表
show databases;
//查看有哪些数据库
use tedu;
使用这个tedu数据库
show tables;
//查看有哪些表
(6)删除数据库和表
drop database 数据库名
//删除数据库的
drop table 表名
//删除表的
delete from 表名 where 条件
//删除数据的
truncate table 表名
//也是删除数据库的.但是他可以裁断序列 这个你跟DELETE 对照试一下就知道了
2.列约束
MySQL可以对要插入的值进行验证,只有符合条件才允许插入,例如:编号不允许重复,性别的值只能是男女...
create table t1(
id 列类型 列约束
);
(1)主键约束——primary key 声明了主键约束的列上不允许插入null
声明了主键约束的列上不允许出现重复的值,一个表中只能有一个主键约束,通常加在编号列,会加快数据的查找速度
null:表示 空,表示一个暂时无法确定的值,例如:无法确定商品的价格、库存量 注意事项:null是关键字,不能加引号 |
(2)非空约束 —— not null 声明了非空约束的列上不允许插入null
(3)唯一约束 —— unique 声明了唯一约束的列上不允许插入重复的值,允许插入null,甚至多个null
(4)默认值约束——default
可以使用default关键字来设置默认值,如果不设置默认值,则默认值为null,具体应用默认值有两种方式
insert into laptop values(1, '小米Air', default...);
insert into laptop(lid, title) values(2, '燃7000'); #没有出现的列会自动使用默认值
如下一个案例:(4-1)创建一个表users2
create table users2( username varchar(10) not null, pid smallint unsigned);
(4-2).创建一个列
alter table users2 add id smallint unsigned;
//之前的表没有具体的primary key,现在加入一列,准备作为主键。
alter table users2 add constraint PK_users2_id primary key(id);
//Constraint后面跟名字,意思是给约束起名字,这里是PK。
(4-3).设置默认值default
//给age设置默认值15:
alter table users2 alter age set default 15;
//删除与添加类似:
alter table users2 alter age drop default;
(5)检查约束 —— check
也称为自定义约束,用户可以添加自定义的约束条件
create table student(
score tinyint check(score>=0 and score<=100)
);
mysql不支持检查约束,可以通过JS来实现
(6)外键约束
声明了外键约束的列上要插入的值必须在另一个表的主键列中出现过,两者的列类型要保持一致
外键约束允许插入null
foreign key(外键列) references 另一个表(主键列)
3.自增列
(1)auto_increment:自动增长,设置了自增列,在插入数据的时候,只需要赋值为null,就会获取最大值然后加1插入
注意事项:自增列必须添加在整数形式的主键列 、自增列允许手动赋值
例子:编写脚本文件01_tedu.sql,先丢弃再创建数据库tedu,设置编码为utf8,进入数据库,创建保存部门数据的表dept,包含的列编号did(主键、自增),部门名称dname(唯一约束),插入以下数据 ---->10 研发部 20 运营部 30 市场部 40 测试部
创建保存员工数据的表emp,包含的列编号eid(主键,自增),姓名ename(非空约束),性别sex(默认值约束),生日birthday,工资salary,所属部门编号deptid(外键约束),插入若干条数据
#设置客户端连接服务器端的编码
set names utf8;
#丢弃数据库,如果存在
drop database if exists tedu;
#创建新的数据库,设置存储字符的编码
create database tedu charset=utf8;
#进入数据库
use tedu;
#创建部门表
create table dept(
did int primary key auto_increment,
dname varchar(16) unique
);
#插入数据
insert into dept values(10,'研发部');
insert into dept values(20,'运营部');
insert into dept values(30,'市场部');
#创建员工表
create table emp(
eid int primary key auto_increment,
ename varchar(8) not null,
sex boolean default 1, #1-男 0-女
birthday date,
salary decimal(8,2), #999999.99
deptId int,
foreign key(deptId) references dept(did)
);
#插入数据
insert into emp values(null,'tao',0,'1973-7-15',50000,30);
INSERT INTO emp VALUES(NULL,'Tom',1,'1990-5-5',6000,20);
INSERT INTO emp VALUES(NULL,'Brown',1,'1993-12-3',22000,NULL);
4.简单查询
(1)查询特定的列
//查询出所有员工的编号和姓名
select eid,ename from emp;
//查询出所有员工的姓名,性别,生日,工资
select ename,sex,birthday,salary from emp;
(2)查询所有的列
select eid,ename,sex,birthday,salary,deptId from emp;
select * from emp;
(3)给列起别名
//查询出所有员工的编号和姓名,使用一个字母作为别名
select eid as a,ename as b from emp;
//查询出所有员工的姓名,工资,所属部门编号,使用别名
select ename e,salary s,deptId d from emp;
as 用来设置别名 as关键字可以省略,保留空格即可 |
(4)显示不同的记录
//查询出都有哪些性别的员工
select distinct sex from emp;
//查询出员工都分布在哪些部门
select distinct deptId from emp;
distinct 不同的,有区别 |
(5)查询时执行计算
//示例:计算2+3+4*5*6+4.3*5.5
select 2+3+4*5*6+4.3*5.5;
//查询出所有员工的姓名及其年薪
select ename,salary*12 from emp;
//假设每个员工的工资增长2000,年终奖20000,查询出所有员工的姓名及其年薪,使用别名
select ename 姓名,(salary+2000)*12+20000 年薪 from emp;
(6)查询的结果排序
//示例:查询出所有的部门,结果按照编号升序排列
select * from dept order by did asc; #ascendant升序的
//示例:查询出所有的部门,结果按照编号降序排列
select * from dept order by did desc;
//describe 描述
//descendant 降序的
//查询出所有的员工,结果按照工资的降序排列
select * from emp order by salary desc;
//查询出所有的员工,结果按照生日升序排序
select * from emp order by birthday asc;
//查询出所有的员工,结果按照姓名升序排列
select * from emp order by ename;
按照字符串排序,按照首个字符的编码排列,如果相同再比较后边的字符 不加排序规则默认是按照升序排列 |
//查询出所有的员工,结果按照工资的降序排列,如果工资相同按照姓名排列
select * from emp order by salary desc,ename;
//查询出所有的员工,女员工显示在前,性别相同按照年龄从大到小排列
select * from emp order by sex,birthday;
(7)条件查询
//查询出编号为3的员工
select * from emp where eid=3;
//查询出姓名为king的员工
select * from emp where ename='king';
//查询出工资在5000以上员工有哪些
select * from emp where salary>5000;
比较运算符:> < >= <= = !=(不等于) |
//查询出不在10号部门的员工有哪些
select * from emp where deptId!=10;
//查询出没有明确部门的员工有哪些
select * from emp where deptId is null;
//查询出有明确部门的员工有哪些
select * from emp where deptId is not null;
//查询出工资在5000以上的女员工有哪些
select * from emp where salary>5000 and sex=0;
select * from emp where salary>5000 && sex=0;
//查询出工资在5000~8000之间的员工有哪些
select * from emp where salary>=5000 and salary<=8000;
//查询出工资在5000以下或者8000以上的员工有哪些
select * from emp where salary<5000 or salary>8000;
and(&&) 并且,两个条件都要满足 or(||) 或者,两个条件只需要满足一个 |
//查询出1993年出生的员工有哪些
select * from emp where birthday>='1993-1-1' and birthday<='1993-12-31';
//查询出在20号部门或者30号部门员工有哪些
select * from emp where deptId=20 || deptId=30;
select * from emp where deptId in(20,30);
//查询出不在20号,并且不在30号部门的员工有哪些
select * from emp where deptId!=20 and deptId!=30;
select * from emp where deptId not in(20,30);
(8)模糊条件查询
//示例:查询出姓名中含有字母e的员工有哪些
select * from emp where ename like '%e%';
//查询出姓名中倒数第2个字符是e的员工有哪些
select * from emp where ename like '%e_';
用于搜索的时候
% 匹配任意个字符 >=0
_ 匹配任意1个字符 =1