热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Mysql修饰符_MySQL

Mysql修饰符
bitsCN.com


Mysql修饰符

not null

有not null 来修饰的话,往表里添加默认值的时候:

数值类型的话,添加的是0

字符串类型的话,添加的是空

如果数据类型是时间戳类型,添加的默认值是当前时间

枚举类型,添加的是第一个预先定义的值

验证举例:

mysql> create table t6(a int not null,b char(10) not null,c timestamp not null,d enum('y','n') not null);

mysql> insert into t6 values();  // 添加默认值(就是values后面为空,什么都不写)

mysql> select * from t6;

+---+---+---------------------+---+

| a | b | c | d |

+---+---+---------------------+---+

| 0 | | 2009-12-28 15:42:17 | y |     

+---+---+---------------------+---+

----------------------------------------------------------------------------------------------------------------------------

default

default修饰符为字段指定一个默认值

例子:

> create table t2(id int,name varchar(10),dep varchar(10) default "HR");

> insert into t2 set id=1,name="Lili";

> insert into t2 set id=2,name="Anna";

> insert into t2 set id=3,name="Hebe",dep="MIS";

> select * from t2;

+------+------+------+

| id | name | dep |

+------+------+------+

| 1 | Lili | HR |

| 2 | Anna | HR |

| 3 | Hebe | MIS |

+------+------+------+

auto_increment

auto_increment修饰符只适用于INT字段,表明MySQL应该自动为该字段生成一个数(每次在前一个值得基础上加1)。

MySQL的表只能有一个auto_increment 字段,而且这个字段必须被定义为键。

> create table t3 (id int not null auto_increment primary key,name varchar(10) not null);

> insert into t3(name) values("Anna");

> insert into t3(name) values("Nana");

mysql> select * from t3;

+----+------+

| id | name |

+----+------+

| 1 | Anna |

| 2 | Nana |

+----+------+

-----------------------------------------------------------------------------------

unique

UNI

表示记录不能重复

例子:

> create table user(name char(10),email varchar(20) unique);

> insert into user values("Anna","anna@163.com");

> insert into user values("Nana","anna@163.com");

ERROR 1062 (23000): Duplicate entry 'anna@163.com' for key 1

unique字段null是允许的

mysql> insert into user values();

mysql> insert into user values();

mysql> select * from user;

+------+--------------+

| name | email |

+------+--------------+

| Anna | anna@163.com |

| NULL | NULL |

| NULL | NULL |

+------+--------------+

删除unique

> alter table user drop index email;

设置unique属性的两种方法:

> create table t10(name char(10),email varchar(20) unique); 

> create table t11(id int,name char(10),unique(id));

------------------------------------------------------------------------------------------------------------

索引

MUL

为了加快搜索速度,减少查询时间, MySQL允许我们为一个表的特定字段设置索引

索引的缺点:它占据一定的磁盘空间,而且它影响INSERT,UPDATE和DELETE执行的时间

添加索引

> create table sales(name char(4),price float(4,2),date date,index name_index(name)); // 给字段name添加索引,索引的名称是name_index; 如果没有定义索引名称,则使用字段名称做为索引的名称

查看索引

> show index from sales;

为多个字段添加索引

> create table sales2(name char(4),price float(4,2),date date,index name_index(name),index (price));

> create table sales3(name char(4),price float(4,2),date date,index (name,price));

使用create index命令向已存在的表添加索引

> create index id_index on xueke (id);

删除索引

> drop index id_index on xueke;

------------------------------------------------------------------

主键

primary key

设置主键的几种方法:

> create table pri(id tinyint not null unique,name char(10)); // not null unique

> create table pri(id tinyint primary key,name char(10));

> create table pri(id tinyint,name char(10),primary key(id));

组合主键

> create table firewall(host varchar(20),port smallint(4),access enum('deny','allow'),primary key(host,port));

> insert into firewall values('192.168.10.1',21,'deny');

> insert into firewall values('192.168.10.1',80,'deny');

> insert into firewall values('192.168.10.2',80,'deny');

> insert into firewall values('192.168.10.2',80,'deny');

ERROR 1062 (23000): Duplicate entry '192.168.10.2-80' for key 1

mysql> select * from firewall;

+--------------+------+--------+

| host | port | access |

+--------------+------+--------+

| 192.168.10.1 | 21 | deny |

| 192.168.10.1 | 80 | deny |

| 192.168.10.2 | 80 | deny |

+--------------+------+--------+

在这种情况下,允许host或者port重复,但不能同时重复

-------------------------------------------------------------------------

外键

建立外键:

foreign key...references...

> create table score (id int,name char(10) primary key,math int,phy int) type=innodb;

> create table addr (id int primary key,aname char(10) not null,addr char(255),tel int,index (aname),foreign key (aname) references score (name)) type=innodb;

约束:

1. 关系中的所有表必须是InnoDB表

2. 参照的表和字段(必须是primary key,否则会出MySQL - errno:150的错误)是存在 的

3. 组成外键的字段被索引

4. 在外键关系中,字段的数据类型必须相似,这对于大小和符号都必须匹配的整数类型及其重要

mysql> insert into score values(1,"Anna",70,80),(1,"John",80,90),(3,"Lisa",50,60);

mysql> select * from score;

+------+------+------+------+

| id | name | math | phy |

+------+------+------+------+

| 1 | Anna | 70 | 80 |

| 1 | John | 80 | 90 |

| 3 | Lisa | 50 | 60 |

+------+------+------+------+

一旦建立一个外键,MySQL只允许向addr.aname字段输入那些也存在于score.name字段的值

mysql> insert into addr values(1,"Anna","addr...",4334543);

mysql> insert into addr values(2,"Lucy","addr...",8774366);

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`db1/addr`, CONSTRAINT `addr_ibfk_1` FOREIGN KEY (`aname`) REFERENCES `score` (`name`))

mysql> select * from addr;

+----+-------+---------+---------+

| id | aname | addr | tel |

+----+-------+---------+---------+

| 1 | Anna | addr... | 4334543 |

+----+-------+---------+---------+

删除外键:

1. 删除有外键的表

> drop table addr;

Query OK, 0 rows affected (0.00 sec)

2. 从表中删除外键

语法:

alter table 表名 drop foreign key 外键名;

show create table 表名;

实验结果 Mysql会报错:

> alter table addr drop foreign key aname;

ERROR 1025 (HY000): Error on rename of './db1/addr' to './db1/#sql2-5258-7' (errno: 152)

on delete cascade子句

cascade删除包含与已删除键值有参照关系的所有记录

建表

> create table score (id int,name char(10) primary key,math int) type=innodb;

> create table addr (id int primary key,aname char(10),addr char(255),tel int,index (aname),foreign key (aname) references score (name) on delete cascade) type=innodb;

插入记录

> insert into score values(1,"Nana",50),(2,"Hebe",70);

> insert into addr values(1,"Nana","addr...",6668787),(2,"Hebe","addr...",8989666);

> select * from score;

+------+------+------+

| id | name | math |

+------+------+------+

| 1 | Nana | 50 |

| 2 | Hebe | 70 |

+------+------+------+

> select * from addr;

+----+-------+---------+---------+

| id | aname | addr | tel |

+----+-------+---------+---------+

| 1 | Nana | addr... | 6668787 |

| 2 | Hebe | addr... | 8989666 |

+----+-------+---------+---------+

删除score表中Hebe的记录,addr表中Hebe的记录自动删除

> delete from score where name="Hebe";

> select * from score;

+------+------+------+

| id | name | math |

+------+------+------+

| 1 | Nana | 50 |

+------+------+------+

> select * from addr;

+----+-------+---------+---------+

| id | aname | addr | tel |

+----+-------+---------+---------+

| 1 | Nana | addr... | 6668787 |

+----+-------+---------+---------+

bitsCN.com
推荐阅读
  • 推荐一个ASP的内容管理框架(ASP Nuke)的优势和适用场景
    本文推荐了一个ASP的内容管理框架ASP Nuke,并介绍了其主要功能和特点。ASP Nuke支持文章新闻管理、投票、论坛等主要内容,并可以自定义模块。最新版本为0.8,虽然目前仍处于Alpha状态,但作者表示会继续更新完善。文章还分析了使用ASP的原因,包括ASP相对较小、易于部署和较简单等优势,适用于建立门户、网站的组织和小公司等场景。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何在MySQL中将零值替换为先前的非零值的方法,包括使用内联查询和更新查询。同时还提供了选择正确值的方法。 ... [详细]
  • 在数据分析工作中,我们通常会遇到这样的问题,一个业务部门由若干业务组构成,需要筛选出每个业务组里业绩前N名的业务员。这其实是一个分组排序的 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
author-avatar
ky
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有