mysql创建表

表完整性约束

匿名 (未验证) 提交于 2019-12-02 23:55:01
认识:约束条件和数据类型宽度一样,都是可选类型 作用:用于保证数据的完整性、一致性 有哪几种约束: primary key ( PK ):标识该字段为该表的主键,可以唯一标识的记录 foreign key ( FK ):标识该字段为该表的外键 not null :标识该字段不能为空,必须赋值 unique key ( UK ):标识该字段的值是唯一的 auto_increment :标识该字段的值自动增长(整数类型,而且为主键) default :为该字段设置默认值,如果插入时不给该字段设置值,此字段使用默认值。 unsigned :表示无符号 zerofill :表示使用 0 填充 例子: sex enum ( 'male' , 'female' ) not null default 'male' 不允许为空,默认是 male age int unsigned NOT NULL default 20 必须为正值(无符号) 不允许为空 默认是 20 是否可空,null表示空,非字符串 not null - 不可空 null - 可空 默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值 mysql > create table t1 ( -> id int not null default 2 , -> name char ( 18 ) not null )

MySQL数据库3分组与单表、多表查询

旧巷老猫 提交于 2019-12-02 23:34:14
目录 一、表操作的补充 1.1null 和 not null 1.2使用not null的时候 二、单表的操作(import) 2.1分组 2.1.1聚合函数 2.1.2group by 2.1.3having 2.1.4升序和降序 2.1.5limit限制输出 2.1.6查询表示需要遵循的顺序(important) 三、多表操作 外键 3.1一对多 3.2多对多 3.3一对一 3.4多表联查 浮华褪尽,人比烟花寂寞…… ——张爱玲 一、表操作的补充 select * from 表名 where 列名 in (值1,值2,。。。); 查出对应值的数据。 1.1null 和 not null 使用null的时候: 当创建的表中有null时我们如果需要查询出来null所对应的信息,需要用select * from 表名 where 字段名 is null; mysql> create table v1(id int auto_increment primary key, -> name varchar(32),email varchar(32))charset=utf8; Query OK, 0 rows affected (0.70 sec) mysql> insert into v1(email) values('xxx'); Query OK, 1 row affected (0

day35 数据操作补充和单表操作

空扰寡人 提交于 2019-12-02 23:25:47
目录 day35 数据操作补充和单表操作 今日内容概要 昨日内容回顾 今日内容详细 数据操作补充 单表查询 day35 数据操作补充和单表操作 今日内容概要 数据操作补充 增 删 改 单表查询 昨日内容回顾 基础数据类型: 数字类型:tinyint,int,float(7,2),decimal 时间类型:datetime,date,time 字符串类型:char定长浪费空间存取快 varchar变长节省空间存取慢 枚举和集合:enum()单选 set()多选和去重 约束 unsigned not null default unique/联合 primary key/联合 auto_increment(依赖unique条件) foreign key(依赖关联字段的unique条件) on update cascade on delete cascade 表与表之间的关系 一对多/多对一:foreign key 一对一:foreign key + unique 多对多:创建第三张表 创建表 create table 表名( 字段名 类型(长度) 约束 约束2) 删除表 drop table 表名; 修改表 alter table 表名 add/drop/modify/change/rename ... xxx; 查看表结构 desc 表名; describe 表名; show

多表查询

匿名 (未验证) 提交于 2019-12-02 22:56:40
本节重点: 多表连接查询 符合条件连接查询 子查询    准备工作:准备两张表,部门表(department)、员工表(employee) create table department( id int, name varchar(20) ); create table employee( id int primary key auto_increment, name varchar(20), sex enum('male','female') not null default 'male', age int, dep_id int ); #插入数据 insert into department values (200,'技术'), (201,'人力资源'), (202,'销售'), (203,'运营'); insert into employee(name,sex,age,dep_id) values ('egon','male',18,200), ('alex','female',48,201), ('wupeiqi','male',38,201), ('yuanhao','female',28,202), ('nvshen','male',18,200), ('xiaomage','female',18,204) ; # 查看表结构和数据 mysql> desc

##mysql清除表中数据

匿名 (未验证) 提交于 2019-12-02 22:06:11
delete from 表名; truncate table 表名; 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内容。 效率上truncate比delete快,但truncate删除后不记录mysql日志,不可以恢复数据。 delete的效果有点像将mysql表中所有记录一条一条删除到删完, 而truncate相当于保留mysql表的结构,重新创建了这个表,所有的状态都相当于新表。 原文:http://blog.51cto.com/13432160/2148940

mysql实现分表

匿名 (未验证) 提交于 2019-12-02 22:06:11
项目开发中,我们的数据库数据越来越大,随之而来的是单个表中数据太多。以至于查询书读变慢,而且由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈。 当出现这种情况时,我们可以考虑分表,即将单个数据库表进行拆分,拆分成多个数据表,然后用户访问的时候,根据一定的算法,让用户访问不同的表,这样数据分散到多个数据表中,减少了单个数据表的访问压力。提升了数据库访问性能。 我们可以进行简单的设想:现在有一个表products存储产品信息,现在有100万用户在线访问,就要进行至少100万次请求,现在我们如果将它分成100个表即products0~~products99,那么利用一定的算法我们就分担了单个表的访问压力,每个表只有1万个请求(当然,这是理想情况下!) 实现mysql 分表的关键在于:设计良好的算法来确定"什么时候情况下访问什么(哪个)表"。 下面我们先来实现一个简单的mysql分表演示:这里使用MERGE分表法 1,创建一个完整表存储着所有的成员信息 create table member( id bigint auto_increment primary key , name varchar( 20), sex tinyint not null default '0' )engine =myisam default charset=utf8 auto_increment

mysql多表子查询

匿名 (未验证) 提交于 2019-12-02 22:06:11
SELECT * FROM stu; #添加多行数据 INSERT INTO stu VALUES(1,'aaa'),(2,'ccc'),(3,'小明'); DROP TABLE stu_temp; CREATE TABLE stu_temp ( ) SELECT * FROM stu_temp; #1:stu_temp表 不能存在的 #2:一边取数据一边创建数据表 #3:stu_temp 约束(主键)是从stu中拿不出来的 CREATE TABLE stu_temp(SELECT * FROM stu); SELECT * FROM info; #4:只需要某些数据表的基本结构,不需要数据! # 查询过程中 where条件不成立,查询的就是结构,否则就是数据+结构 CREATE TABLE info_temp(SELECT * FROM info WHERE 1=2); SELECT * FROM info WHERE 1=1; SELECT * FROM info_temp; CREATE TABLE info_temp3(SELECT id,age FROM info); SELECT * FROM info_temp3; DELETE FROM info_temp3; SELECT * FROM info; #通过age排序 1:升序 2:降序 SELECT * FROM

mysql删除大表更快的drop table办法

匿名 (未验证) 提交于 2019-12-02 22:06:11
1 46672 mytable.frm 1 391466975232 mytable.frm.h 众所周知drop table会严重的消耗服务器IO性能,如果被drop的表容量较大,甚至会影响到线上的正常。 首先,我们看一下为什么降容量大的表会影响线上服务   直接执行drop table, MySQL 会将表定义和表数据全都删除,包括磁盘上的物理文件,也包括缓冲池中的内存数据。   这么分两步,第一步从缓冲池中删除,这会涉及到table_cache的锁,如果持有table_cache的锁,这将导致其他查询都无法执行。这种情况在没有innodb_per_table之前尤为严重。另外,mysql5.5.23之后添加lazy drop table功能,这个功能用来解决互斥的LRU列表。其中心思想就是加锁,找到需要被删除的页面,删除1024个页之后释放锁让其他线程工作,之后循环而percona的lazy drop处理起来更优雅一些,其会先加锁,然后找到需要被删除的页面,标记,释放锁,后台慢慢删除。   之后就是第二步,这步在大容量表的时候更为消耗时间,那就是在OS上删除物理文件。大家都知道在EXT3上RM一个200G的文件会非常耗时,这是由于EXT3存储数据的结构导致,如果一个很大的文件,EXT3的i_block无法直接存放,需要多层嵌套才能完全存储下,在这种情况下由于映射的层次多

数据库:MySQL数据库优化:表复制、索引、视图、查看表中未来的自增数

匿名 (未验证) 提交于 2019-12-02 22:06:11
MySQL数据库优化: mysql表复制: 第一步:1.复制表结构 create table student like user; 第二步:2.复制表内容 insert into student select * from user; mysql索引: 1.查看索引 show index from user\G 2.普通索引 1)创建 create index i_age on user(age); 2)删除 drop index i_age on user; 3.唯一索引 1)创建 create unique index u_username on user(username); 2)删除 drop index u_username on user; mysql视图: 1.创建 create view userclass as select user.username,user.age,class.name from user,class where user.class_id=class.id; 2.删除 drop view userclass; 3.查看 show tables; 4.查看视频数据 select * from userclass; 5.视图的特性 当表中数据发生变化时视图数据也会随着发生变化. mysql中查看表中未来的自增数: show create

MySQL基础/数据库和表的设计

匿名 (未验证) 提交于 2019-12-02 22:06:11
MySQL基础 一:安装MySQL(按步骤操作,如果下载后使用不了,试着用360安全卫士卸载MySQL,清除残留的,方便在下载造成不必要的麻烦;如果这样也不行,那就需要重做系统在进行下载) 二:创建数据库/表 黑窗口:1:输入密码     2:show databases:查看数据库     3:create database 库名:创建库     4:use 库名:使用库     5:create table 表名:创建表(       );     6:show tables:查看库里有哪些表 数据库和表的设计 一:数据完整性:指数据的精确性和可靠性。目的:为了防止数据库中存在不符合语义规定的数据或者因错误信息的输入而造成无效的操作。          primary key:主键约束          unique:唯一约束    域完整性:考虑如何限制向表中输入的数值的范围         foreign key:外键约束         defaule:默认约束         not null:非空约束    引用完整性:外键属于引用完整性    用户自定义完整性 二:数据完整性在MySQL中的体现   1:使用主键约束:列名数据类型 primary key[默认值],   2:设置字段为自动整长:列名数据类型 auto-inchement,   3:使用外键约束:主表