msyql的使用
1.登录数据库
mysql -uroot -p -h ip地址 -P 端口号;
2.展示当前所有的数据库;
show databases;
3.创建数据库
create database testDB;
4.进入/切换到数据库中
use testDB;
5.开始操作数据库表
create table t1(
num int(4) unsigned zerofill
);
insert into t1 values(20);
insert into t1 values(-1);
select * from t1;
create table t2(
money double(4,2) zerofill
);
create table t4(
sex enum('男','女')
);
6.显示当前数据库中所有的表
show tables;
MySQL数据类型
1.整型
tinyint //取值范围 -128~127
smallint
mediumint
int [(M)][UNSIGNED][ZEROFILL] //int(4)只能保存4位的整数,
//unsigned 表示无符号数,不能表示负整数了;
//zerofill 用0填充没有的位数
integer
bigint
2.浮点型
3.日期型
4.字符型
char(4) //定长,没有用满的长度用空格填满
varchar(4) //变长,只会占据实际长度
5.枚举型
6.集合型
create table student(
id int,
name varchar(5),
gender enum("man","wman"),
time date,
money double
);
insert into student(gender) value("man");
约束
1.not null 非空约束
2.unique 唯一约束
3.primary key 主键约束,特点:非空唯一
4.foreign key 外键约束
create table student(
id int primary key,
name varchar(5) not null,
phone char(11) unique,
);
desc student; //展示表的约束
数据库表和表的关联关系
一对一:外键放在任意一边
一对多:外键放在多的一边
多对多:需要通过桥表来表示关联关系
mysql自增
create table auto_test(
id int primary key auto_increment,
name varchar(20) not null
);
index索引
作用:提高索引效率
create teable index_test(
id int primary key auto_increment,
name varchar(20),
age int,
index name_index(name),
key(age)
);
将来只有通过索引列进行查询才会提高效率
修改表中的相关内容
create table alert_test(
id int primary key auto_increment,
name varchar(5),
);
添加列
alert table alert_test
add column phone int unique;
删除列
alter table alter_test drop column name;
修改表名
alter table alert_test rename alter_test;
修改列名/列的数据类型/列的约束
alter table alter_test change phone
num int(5) not null;
alter table alter_test change name name varchar(5) not null;
展示当前数据库中所有表名
show tables;
删除表的主键约束(不能设置自增长,否则无法删除)
给表添加主键约束
alter table alter_test add primary key (id);
DML
插入语句 insert
语法:
**insert into 表名 values(值1,值2,值3);
insert into 表名(字段1,字段2) values(值1,值2);**
插入数据时,默认按照表声明的字段顺序进行插入。
例如:
insert into test values(1,"tom",20);
insert into test(name,age) values("tom",20);
删除语句 delete
语法:
delete from 表名; //删除表中所有数据,加上where限制删除条件
例:
delete from test; //删除test表中的所有数据
delete from test where id = 1; //删除表中id为1的记录
修改语句 update
语法:
update 表名 set 字段名=修改的值;
update 表名 set 字段名=修改的值 where 条件;
例:
update test set name="张三";
update test set name="李四" where id = 1;
整理数据库
语法:
optimize table test;
字符操作
1.字符函数
lower():将字符全部小写
upper():将字符全部大写
concat():拼接字符串
substr():截取字符串,第一个参数表示要截取的字符串,第二个参数表示截取的开始位置,下标从1开始,第三个参数表示截取长度,长度超出最大范围,则按最大有效范围为主
length():获取字符串的长度
select "hello WORLD" as msg;
select lower("Hello WORLD") as msg;
select upper("Hello WORLD")as msg;
select substr("hello world",1,3);
//下标从1开始
//从第一个位置开始截取三个长度的字符
查询
distinct 去除重复项
select distinct name from s_emp;
例:查看每个员工的员工id,名字和月薪涨100以后的年薪
select
id,last_name,(salary+100)*12
from s_emp;
给查询的列起别名 as
例:查看员工的员工id,名字和年薪,年薪列名为annual
select
id,last_name,salary*12 as annual
from s_emp;
两个字段拼接
select
id,first_name || last_name as name
from s_emp;
排序和限制查询
order by(放在最后的关键字)
默认按照升序ASC,降序使用关键字DESC
select
from
order by 列名 ;
例:按照工资的升序来展示员工id和名字
select
id,last_name,salary
from s_emp
order by salary;
多表查询
例:查询员工名字、部门编号、部门名字
select
last_name,s_dept.id,name
from s_emp,s_dept where dept_id=s_dept.id;
消除笛卡尔积:使用关联来消除
1.等值连接
多表查询时,将表和表之间存在关联关系(外键)的字段做等值连接。
2.外连接
3.自连接
4.不等值连接
例:
select
last_name,e.dept_id,d.name dept_name,r.name region_name
from
s_emp e,s_dept d,s_region r
where
e.dept_id=d.id and d.region_id=r.id;