Chapter 13 .数据类型&数据的增删改

2018-10-04  本文已影响6人  GeekGray

阅读原文

Chapter 13 .数据类型&数据的增删改

常见的数据类型

/*

数值型:

整型
小数:
    定点数
    浮点数

字符型:

较短的文本:char、varchar
较长的文本:text、blob(较长的二进制数据)

日期型:

*/

一、整型

/*

分类:

tinyint、smallint、mediumint、int/integer、bigint

1 2 3 4 8

特点:

长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用!

*/

1.如何设置无符号和有符号

DROP TABLE IF EXISTS tab_int;
CREATE TABLE tab_int(
    t1 INT(7) ZEROFILL,
    t2 INT(7) ZEROFILL 

);

DESC tab_int;


INSERT INTO tab_int VALUES(-123456);
INSERT INTO tab_int VALUES(-123456,-123456);
INSERT INTO tab_int VALUES(2147483648,4294967296);

INSERT INTO tab_int VALUES(123,123);


SELECT * FROM tab_int;

二、小数

/*

分类:

1.浮点型

float(M,D)
double(M,D)

2.定点型

dec(M,D)
decimal(M,D)

特点:

*/

测试M和D

DROP TABLE tab_float;
CREATE TABLE tab_float(
    f1 FLOAT,
    f2 DOUBLE,
    f3 DECIMAL
);
SELECT * FROM tab_float;
DESC tab_float;

INSERT INTO tab_float VALUES(123.4523,123.4523,123.4523);
INSERT INTO tab_float VALUES(123.456,123.456,123.456);
INSERT INTO tab_float VALUES(123.4,123.4,123.4);
INSERT INTO tab_float VALUES(1523.4,1523.4,1523.4);

原则:

/*

所选择的类型越简单越好,能保存数值的类型越小越好

*/

三、字符型

/*

较短的文本:

char
varchar

其他:

binary和varbinary用于保存较短的二进制

enum用于保存枚举

set用于保存集合

较长的文本:

text
blob(较大的二进制)

特点:

写法 M的意思 特点 空间的耗费 效率
char char(M) 最大的字符数,可以省, 默认为1,略固定长度的字符 比较耗费
varchar varchar(M) 最大的字符数,不可以省略 可变长度的字符 比较节省

*/

CREATE TABLE tab_char(
    c1 ENUM('a','b','c')


);


INSERT INTO tab_char VALUES('a');
INSERT INTO tab_char VALUES('b');
INSERT INTO tab_char VALUES('c');
INSERT INTO tab_char VALUES('m');
INSERT INTO tab_char VALUES('A');

SELECT * FROM tab_set;



CREATE TABLE tab_set(

    s1 SET('a','b','c','d')



);
INSERT INTO tab_set VALUES('a');
INSERT INTO tab_set VALUES('A,B');
INSERT INTO tab_set VALUES('a,c,d');

四、日期型

/*

分类:

特点:

字节 范围 时区等的影响
datetime 8 1000——9999 不受
timestamp 4 1970-2038

*/

CREATE TABLE tab_date(
    t1 DATETIME,
    t2 TIMESTAMP

);



INSERT INTO tab_date VALUES(NOW(),NOW());

SELECT * FROM tab_date;


SHOW VARIABLES LIKE 'time_zone';

SET time_zone='+9:00';

2. 数据的增删改

DML语言

/*

数据操作语言:

*/

一、插入语句

方式一:经典的插入

/*

语法:

insert into 表名(列名,...) values(值1,...);

*/

SELECT * FROM beauty;

1.插入的值的类型要与列的类型一致或兼容

INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'唐艺昕','女','1990-4-23','1898888888',NULL,2);

2.不可以为null的列必须插入值。可以为null的列如何插入值?

方式一:

INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'唐艺昕','女','1990-4-23','1898888888',NULL,2);

方式二:

INSERT INTO beauty(id,NAME,sex,phone)
VALUES(15,'娜扎','女','1388888888');

3.列的顺序是否可以调换

INSERT INTO beauty(NAME,sex,id,phone)
VALUES('蒋欣','女',16,'110');

4.列数和值的个数必须一致

INSERT INTO beauty(NAME,sex,id,phone)
VALUES('关晓彤','女',17,'110');

5.可以省略列名,默认所有列,而且列的顺序和表中列的顺序一致

INSERT INTO beauty
VALUES(18,'张飞','男',NULL,'119',NULL,NULL);

方式二:

/*

语法:

insert into 表名
set 列名=值,列名=值,...

*/

INSERT INTO beauty
SET id=19,NAME='刘涛',phone='999';

两种方式大pk ★

1、方式一支持插入多行,方式二不支持

INSERT INTO beauty
VALUES(23,'唐艺昕1','女','1990-4-23','1898888888',NULL,2)
,(24,'唐艺昕2','女','1990-4-23','1898888888',NULL,2)
,(25,'唐艺昕3','女','1990-4-23','1898888888',NULL,2);

2、方式一支持子查询,方式二不支持

INSERT INTO beauty(id,NAME,phone)
SELECT 26,'宋茜','11809866';

INSERT INTO beauty(id,NAME,phone)
SELECT id,boyname,'1234567'
FROM boys WHERE id<3;

二、修改语句

/*

1.修改单表的记录★

语法:

update 表名
set 列=新值,列=新值,...
where 筛选条件;

2.修改多表的记录【补充】

语法:

sql92语法:

update 表1 别名,表2 别名
set 列=值,...
where 连接条件
and 筛选条件;

sql99语法:

update 表1 别名
inner|left|right join 表2 别名
on 连接条件
set 列=值,...
where 筛选条件;

*/

1.修改单表的记录

案例1:修改beauty表中姓唐的女神的电话为13899888899

UPDATE beauty SET phone = '13899888899'
WHERE NAME LIKE '唐%';

案例2:修改boys表中id好为2的名称为张飞,魅力值 10

UPDATE boys SET boyname='张飞',usercp=10
WHERE id=2;

2.修改多表的记录

案例 1:修改张无忌的女朋友的手机号为114

UPDATE boys bo
INNER JOIN beauty b ON bo.`id`=b.`boyfriend_id`
SET b.`phone`='119',bo.`userCP`=1000
WHERE bo.`boyName`='张无忌';

案例2:修改没有男朋友的女神的男朋友编号都为2号

UPDATE boys bo
RIGHT JOIN beauty b ON bo.`id`=b.`boyfriend_id`
SET b.`boyfriend_id`=2
WHERE bo.`id` IS NULL;

SELECT * FROM boys;

三、删除语句

/*

方式一:delete

语法:

1、单表的删除【★】

delete from 表名 where 筛选条件

2、多表的删除【补充】

sql92语法:

delete 表1的别名,表2的别名
from 表1 别名,表2 别名
where 连接条件
and 筛选条件;

sql99语法:

delete 表1的别名,表2的别名
from 表1 别名
inner|left|right join 表2 别名 on 连接条件
where 筛选条件;

方式二:truncate

语法:truncate table 表名;

*/

方式一:delete

1.单表的删除

案例:删除手机号以9结尾的女神信息

DELETE FROM beauty WHERE phone LIKE '%9';
SELECT * FROM beauty;

2.多表的删除

案例:删除张无忌的女朋友的信息

DELETE b
FROM beauty b
INNER JOIN boys bo ON b.`boyfriend_id` = bo.`id`
WHERE bo.`boyName`='张无忌';

案例:删除黄晓明的信息以及他女朋友的信息

DELETE b,bo
FROM beauty b
INNER JOIN boys bo ON b.`boyfriend_id`=bo.`id`
WHERE bo.`boyName`='黄晓明';

方式二:truncate语句

案例:将魅力值>100的男神信息删除

TRUNCATE TABLE boys ;

delete pk truncate【面试题★】

/*

*/

SELECT * FROM boys;

DELETE FROM boys;
TRUNCATE TABLE boys;
INSERT INTO boys (boyname,usercp)
VALUES('张飞',100),('刘备',100),('关云长',100);
上一篇下一篇

猜你喜欢

热点阅读