mysql简单基础
- 2019 年 10 月 6 日
- 筆記
无论是风里,还是在雨里,我都在这里守候着你~
数据类型
整数:int,bit
小数:decimal,
decimal(3,1)表示一共三位数,小数占一位。
字符串:varcahr,char
char表示固定的字符串比如char(2)需要2位,不足填充空格
varchar表示可变长字符串
text:储存大文本,一般大于4000时使用。
日期时间:date,time,datetime
枚举:enum,enum('男','女'),你男可以用1表示,1对应男,2就是女,这就是枚举。
对于图片,视屏,不储存在数据库中,表中值存储文件路径。
约束
主键primary key:物理上储存的数据
非空not null:不允许为空
唯一unique:唯一键,不允许重复
默认default:设置默认,不输入会自动填充默认值
外键foreign key: 关系键
以命令行的形式操作数据库
windows+r cmd 进入终端
输出mysql -uroot -p 连接数据库,输入你的mysql密码,会出现如下,表示连接成功。

-uroot:-u表示用户名,root是用户名
-p:密码
或者输入 mysql -uroot -p123456 也会进入,123456是我mysql的密码。
exit:退出。
quit:也是退出。
mysql的sql语句都有;
查看数据库:show databases;
查看数据库版本:select version();
显示当前时间:select now();
创建一个数据库:create database 数据库名;
出现Query Ok, 1 row affected ,表示执行成功!
你show databases; 就会看到 我们刚刚创建的数据库python_data。
但是还记得我们用图形化工具时创建数据库指定了编码utf8吗?
因此我们在创建数据库时,也要指定编码:
create databse 数据库名 charset=utf8;
这条语句才支持我们的中文。但是你已经创建了该数据库,我们需要删除后从新创建。
删除数据库:drop databse 数据库名;
对表的操作
在创建一个数据库后,我们创建表,我们在创建表前需要进入某个数据库。
进入数据库:user 数据库名;
查看当前所在数据库:select database();
查看当前数据库中所有的表:show tables;
创建表:create table 表名(字段1 类型,字段2 类型);以此类推。
比如:create table table1(id int,name varchar(30));
如果我想添加一些约束,比如不能为空,主键约束,唯一约束等等怎么写?
create table table1(
id int primary key not null aotu_increment,
name varchar(30) not null
);
直接在后面接着打约束即可。
直接写int 是可以为负的,怎么样不让他有负值?以及其他的用法。
我们以创建table1为例,id(编号),name(姓名),age(年龄),hight(身高),sex(性别),
classid (班级id)。
create table table1(
id int unsigned primary key not null aotu_increment,
name varchar(30) not null,
age tinyint unsigned default 18,
hight decimal(4,1),
sex enum('男','女') defaul "保密",
classid int unsigned
);
在int后添加一个unsigned即可。

primary key:主键
not null:不能为空
aotu_increment:自动增长
查看表结构:desc 表名;
添加数据
自动增长字段不需要你填写。
insert into 表名 values("张三",18,180.5,"男",1);
但是如果我们只对某些字段插入数据就要这样写:
不想插入的数据可以不写,一般没有插入的默认为空,如果给了not null约束,必须插入数据。
前后是一一对应的关系。也就是可以部分插入。
insert into 表名(name,age,hight,sex,classid) values("张三",18,180.5,"男",1);
多行插入:
insert into 表名(name,age,hight,sex,classid) values("张三",18,180.5,"男",1),("李四",19,170.6,"女",2);
一下插入两行数据。
查询表中的数据:
*号表示查询全部
select * from 表名;
查询表中的某个字段。
如果我们只想查询name值。
select name from 表名;
查询name和age。以,隔开。
select name,age from 表名;
给以存在的表添加一个生日字段。
第一种方法:
删除当前表,重新创建。
第二种方法:
修改表结构。
alter table table1 add birthday datetime;
由于datetime是精确到时分秒的,我们要将他修改成date。
修改表的数据类型:
不修改字段名:
alter table table1 modify birthday date;
修改字段名将birthday修改成bday:
alter table table1 chenge birthday bday date;
删除一个字段名:
alter table table1 drop hight;
如果该字段有值,它的值也会没有。
删除表:
drop table 表名;
查看创建表的sql语句:
show create table 表名;
查看创建数据库的sql语句:
show create database 数据库名;
修改表中的数据:
全部修改:
update 表名 set 字段名=要修改的值;
例如: update table1 set name = "王五";
修改其中一个:
update 表名 set 字段名=要修改的值 where id = 要修改的id;
上面的是根据id去修改,你也可以根据name去修改,当然name可能重复,找一个唯一的,那就是id。
例如:
update table1 set age=60 where id = 1;
修改多个用,隔开:
update table1 set age=60,sex = "女" where id = 1;
查询中的where:
取出id小于60的所有数据。
select * from where id<60;
取出name等于张三的数据。
select * from where name = "张三";
同理其他也是一样的。
取出多个条件的(名字等于张三,年龄等于18):
select * from where name = "张三" and age=18;
取出name等于张三或者年龄为18的
select * from where name = "张三" or age=18;
给一个别名:
select name as 姓名 from table1;
输出的表的表头就不会是name,会显示汉子姓名。
删除一个表中的数据:
delete from table1 where id =1;
删除id等于1的数据,你也可以根据name来删除。
delete from table1
同样清空数据表。
上面的删除有一个问题,id为自动增长,删除时,比如id为1,删除后,添加数据是从2开始。破坏表结构,也就是1不见了,也不会补充上去。这是物理删除。
所以我们如果在公司,都是假的删除,也就是说给一个字段,0表示删除,1表示正常,也就是说删除的时候实际上是修改,把他修改成0就表示删除了。这是逻辑删除。