mysql之表的增删改查
1.增加一行
insert into msg
(id,title,name,content)
values
(1,'初来乍到','张三','刚来能不能当老大?');
默认建表一般用UTF8,而在windows下窗口是GBK的。
因此,需要声明字符集:set names gbk;
注意:在word里会有两种英文单引号,[ ‘ ]与[ ' ]。mysql里用的是单引号[ ' ]。一般在其它里都是[ ' ],如你在笔记本里编写就是[ ' ]。那么如何输出[ ' ],先输出[ ‘ ],然后在其后按ctrl+z即可将[ ‘ ]转换成[ ' ]。
连续插入三条语句
insert into msg
(id,title,name,content)
values
(3,'3标题','刘备','雌雄双剑'),
(4,'4标题','关羽','青龙偃月刀'),
(5,'5标题','张飞','丈八蛇矛');
2.更改一行数据
update msg
set
id = 2,
content = '偏要当老大'
where
name = '李四';
3.删除一行数据
delete from msg where name = '李四';
4.查看数据
select id,title from msg; (查看整个表的id,title列数据)
select id,title from msg where id > 2; (查看id > 2的id,title列数据)
mysql数据库相关知识
1.
姓名 | 籍贯 | 性别 | 年龄 | 简介 |
所谓建表:就是声明列的过程
数据是以文件的形式放在硬盘(也有放在内存里)
列:不同的列类型占的空间不一样
选择的原则:够用,又不浪费
2.
姓名 | 籍贯 | 性别 | 年龄 | 简介 |
张三 | 安徽 | 男 | 23 |
|
增加数据是增加行的过程
详解列类型:
整型
tinyint 1字节 有符号:(-128 – 127) 无符号:(0 - 255)
smallint 2字节 有符号:(-215 –215-1) 无符号:(0 – 216-1)
mediumint 3字节
int 4字节
bigint 8字节
从数学上来讨论tinyint
- 占据空间
- 存储空间
tinyint 微小的列类型,1字节
测试tinyint
create table class (
id int primary key auto_increment,
name varchar(10),
age tinyint
) charset utf8;
insert into class
(name,age)
values
('zhangsan','25');
insert into class
(name,age)
values
('zhangsan','128'); //范围超出
tinyint默认是有符号的(-128-127),强制声明为有符号:
tinyint(M) unsigned zerofill
alter table class add age2 tinyint unsigned; //增加一列age2
insert into class
(name,age,age2)
values
('lisi','25',-1); //范围超出
insert into class
(name,age,age2)
values
('lisi','25',129);
alter table class add age3 tinyint(1);
unsigned //无符号,影响存储范围
M //代表宽度,(在zerofill时才有意义) 00001 00002 M=5
zerofill //零填充 (如果某列为zerofill为无符号)
列的默认值:alter table class add age4 tinyint(1) not null Default 0;
查看class表的内容:select * from class;
小数型/浮点型
float(M,D)
M //精度(总位数,不包含点)
D //小数位
定点型(更精确)
decimal(M,D)
测试:
建表:
create table goods (
name varchar(10) not null default '',
price float(6,2) not null default 0.00
)charset utf8;
插数据:
insert into goods
(name,price)
values
('跑步机',688.896);
小知识点:因为是小数点后面保留两位,所以688.896为四舍五入,但是不是平常所以说的四舍五入而是银行所用的四舍五入,即5的前面是1、2、3或4 时舍,5的前面为6、7、8或9时入。一般浮点型不定位数,但mysql除外。
字符型:
char 定长,char(M),M代表可容纳的字符数
varchar 变长,varchar(M),代表宽度,即可容纳的字符数
区别:
char定义:M个字符,如果存的小于M个字符,实占M个字符,最后实际有空格时取出会丢失
varchar定义:M字符,如果存的小于M个字符,实占N个字符,N <= M
char与varchar型的选择原则
- 空间利用效率,四字成语表,char(4)
个人简历,微博140字,varchar(140)
- 速度,用户名:char (char速度快些)
text 文本串,可以存储大段字符
日期时间类型:
//year 年类型:1901-2155 (0000表示错误时选择)
//date 日期类型:
//time 时间类型:
//datetime 时期时间类型:
年类型:
创建表y:
create table y (
ya year(4)
);
插入一行数据:(省去写列时默认为第一列)
insert into y
values
('1901');
insert into y values ('97'); //插入1997年
insert into y values ('12'); //插入2012年
如果输入2位,00-69 表示2000-2069
70-99 表示1970-1999
日期date类型: 典型格式:1992-08-12
存储范围: 1000-01-01 — 9999-12-31
日期date类型测试:
create table d (
title varchar(30),
dt date
)charset utf8;
insert into d
values
('开国大典','1949-10-01');
时间time类型:典型格式:hh:mm:ss
存储范围: -838:59:59 — 838:59:59
时间time类型测试:
create table t (
tm time
);
insert into t values ('13:34:56')
日期时间类型datetime:典型格式:1989-05-06 14:32:08
存储范围: 1000-01-01 00:00:00 —9999-12-31 59:59:59
Datetime类型测试:
create table user (
name varchar(20) not null default '',
regtime datetime not null default '1000-01-01 00:00:00'
) charset utf8;
insert into user
(name)
values
('张三');
insert into user
values
('李四','2012-03-22 14:28:36');
注意:在开发中,很少用日期时间类型来表示一个需要的精确到秒的列,原因是虽日期时间类型能精确到秒,而且文件查看,但不方便计算时间间隔,一般用时间戳来表示。
时间戳:是1970-01-01 00:00:00到当前时间的秒数
创建teacher库(枚举类型)
create table teacher (
name varchar(20),
gender tinyint
);
insert into teacher values ('张',1); //('张','男')中 '男'在UTF8中占三个字节,超过了tinyint一个字节,所以用1替代。
create table t2 (
gender enum('男','女') //其实枚举enum类型不符合关系型数据库的理念
) charset utf8;
insert into t2 values ('女');