类型 | 取值范围 |
---|---|
tinyint | -128 - 127 |
smallint | -32768 - 32767(几万) |
mediumint | -8388608 - 8388607(几百万) |
integer | -2147484468 - 2147483647(几十亿) |
bigint | -9223372036854775808 - 9223372036854775807(天文数字) |
decimal[精度,小数位数]
小数位数是定数;数值是什么就是什么,不会进行类似于四舍五入,不会存储近似值。
float[长度,小数位数]
double[长度,小数位数]
float的小数位数不是固定的;超出存储范围,近似值进行存储。
小结:
临时表是一张表,用来临时保存一些数据。它只对创建它的用户可见。当会话结束时,MySQL自动删除临时表。
保存这些数据的时候,尽量少的占用资源,删除数据的时候,尽量少的占用资源。
临时表的核心:建立和删除表以及里面的数据时,消耗资源非常小。
例:创建临时表sumpenalties,保存所有罚款的总和。
CREATE TEMPORARY TABLE sumpenalties(
total DECIMAL(10,2)
);
if not exit :强制不显示出错消息。
结构一样。
create table copy_teams LIKE teams;(空表,不带数据)
create table copy_teams_1 AS select * from teams;(带数据)
--》PS:这个SELECT可以非常非常的复杂
例26: 创建表city_names,其主键列从10开始编号。
CREATE TABLE city_names(
seqno INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(30) NOT NULL
) AUTO_INCREMENT = 10;
INSERT INTO city_names VALUES(NULL,'北京');
INSERT INTO city_names VALUES(NULL,'上海');
INSERT INTO city_names VALUES(NULL,'天津');
SELECT * FROM city_names;
comment:给表添加注释
CREATE TABLE mycomm(
column_a INTEGER
) COMMENT '测试表';
外键约束
只要有引用,主表就受到了限制。
主表删除数据,子表引用了主表的数据。
create table t1(id int,name varchar(10),sex enum('男','女')); --》只能取男或者女
desc t1;
insert into t1 values(1,'张三','男');
insert into t1 values(2,'李四','女');
insert into t1 values(3,'张三','M');
–》会报错,因为只能是’男’或者’女’!
不同:
相同点:
check(id>100);
check约束的括号里面可以是巨复杂的表达式。
删除表以前:
(建议:status看一下此时的状态!!再删!)
删除临时表要加temporary:
添加一个新列时,默认是加在最后。
mysql>alter table t1 add COLUMN b_date date not null after name;
mysql>alter table t1 drop column b_date;
--》删除b_date列
mysql>alter table t1 modify sex int;
--》把sex列的数据类型宽度
mysql>alter table t1 modify sex varchar(10);
--》把sex列的宽度改为varchar(10);
联合主键、几个列合起来形成一个主键。
-CREATE [OR REPLACE] VIEW view_name [(column_list)]
-AS select_statement
- [WITH [CASCADED | LOCAL] CHECK OPTION]
-OR REPLACE:如果视图已经存在则替换它
create view v_players as
select 语句
create or replace view 视图名(别名,......)
as select
字段,......
from 表名
此方法不常用。
例:
从视图中cplayers中删除联盟会员号码为6524的球员 。
DELETE FROM cplayers
WHERE leagueno=‘6524’;
因为视图本身没有数据,因此对视图进行的dml操作最终都体现在基表中。
对于可以执行DML操作的视图,定义时可以带上WITH CHECK OPTION约束。该约束的作用是:对视图所做的DML操作的结果,不能违反视图的WHERE条件的限制 。
例:创建视图,包含1960年之前出生的所有球员(老兵)。
CREATE OR REPLACE VIEW veterans
AS SELECT *
FROM players
WHERE birth_date < '1960-01-01'
WITH CHECK OPTION;
示例1:以用户newroot执行:
CREATE USER 'demo'@'%' IDENTIFIED BY 'demo';
创建视图,视图的定义者是demo
CREATE OR REPLACE
DEFINER='demo'@'%'
SQL SECURITY DEFINER
VIEW cplayers
AS SELECT playerno,leagueno
FROM players
WHERE leagueno IS NOT NULL;
把视图的select权限授给demo :
GRANT SELECT ON tennis.cplayers TO 'demo'@'%' ;
例:以用户newroot执行:
CREATE OR REPLACE
SQL SECURITY DEFINER
VIEW cplayers
AS SELECT playerno,leagueno
FROM players
WHERE leagueno IS NOT NULL;