20150102--Mysql外键+增删改查-02

外键

外键:外面的键,前表中的某个字段与另外的表中的字段(主键)有一个对应的关系

外键关键字:foreign key,也是一种索引。

创建外键

外键和主键有点类似,但是不一样。

1. 在所有的字段之后,指定对应的外键。

foreign key(字段名) references 表名(字段)

外键约束

外键的作用是用来维护两张表之间的关系,关系是用来限制表操作的。

父表(主表):被外键指向的表叫做主表

子表(从表):存在外键字段的表叫子表

1. 限制子表数据的插入:子表中的外键字段的值必须事先已经在父表中存在

2. 限制父表对数据进行操作:更新和删除,限制指的是对应主键的修改。

修改外键:外键不能被直接修改,应当先删除后新增

删除外键

alter table 表名 drop foreign key 外键名;

新增外键

修改表结构

alter table 表名 add constraint 外键名 foreign key(字段) references 表名(字段);

约束模式

用户可以根据自身的需求对外键采用不同的约束方式

有三种约束模式

严格模式:restrict,严格约束外键对应的表

置空模式:set null,将一个外键对应的字段数据给变成null,当父表数据改变的时候,子表的数据被设置成null

级联模式:cascade,级联操作,当父表数据被改变的时候,子表跟着改变

语法

foreign key(字段) references 表(字段) on delete 约束模式 on upldate 约束模式

通常的约束模式:on update cascade on delete set null

更新父表

删除父表数据

外键条件

1. 外键表和被引用的表(父子表)都应该是InnoDB的存储引擎

2. 外键字段和被引用的主键字段,必须数据类型完全一致

3. 外键的名字必须具有唯一性

4. 外键可以在一张表中创建多个

5. 如果要使用约束模式:置空模式,必须保证子表对应的外键字段本身允许为空

高级数据操作

新增数据

标准语法

insert into 表名 (字段列表) values(值列表);

蠕虫复制

从一个已有的数据中获取数据,然后将数据插入到对应数据表中。

insert into 表名 (字段列表) select 字段列表 from 表名;

蠕虫复制的作用

1. 短时间内迅速增加表中的数据(意义不大),测试数据表的压力

2. 从表中去复制数据

a) 复制表结构:create table 表名 like 已经存在的表;

b) 蠕虫复制数据

主键冲突

主键冲突指的是当数据进行插入操作的时候,如果主键冲突了该怎么办。

解决方案1:如果主键冲突,执行更新操作,没有冲突直接插入

insert into 表名 values (值列表) on duplicate key update 字段 = 值[,字段 = 值]

解决方案2:如果主键冲突,先删除,后新增

replace into 表名 values(值列表);

删除数据

标准语法

delete from 表名 where条件;

高级语法

delete from 表名 where条件 [order by排序] [limit 数值]; -- 排序后删除指定条数数据

truncate语法:清空表包括对应的自动增长:先删除表,后新增表

更新数据

与高级的删除数据一样:利用排序和限制

update 表名 set 字段 =值 where条件 order by字段 limit 数值;

查询数据

标准语法

select 字段列表/* from 表名 where条件;

完整语法

select 选择模式 表达式[字段列表(别名)/*] [from 子句] [where子句] [group by子句] [having子句] [order by子句] [limit子句]

选择模式

选择模式指的是当select查到数据之后,对数据的处理方式:查询全部(默认的all),去重(去掉重复的:记录重复,distinct)

表达式

select指定的要返回数据形式

通常要查询的数据,都是字段列表或者*(全部字段),有时候会因为同时查询多个表而出现字段重名的问题。需要使用字段别名来决绝问题。

语法:字段 [as] 别名

别名不能真正改变字段名。

from子句

from子句指 的是数据源

from后面必须接数据源,数据源不一定是一张表

1. from后面可以跟多张表,使用逗号分隔

笛卡尔积没有意义:应当尽量避免。

2. 表别名

3. 数据源不一定是一张已经存在的表,需要的只是一个二维表的结构。from后面可以跟一个子查询。

4. 虚拟表

一个不存在的表:dual,凡是没有数据源的select语句都可以为了保证语法的完整性,而增加from子句,数据源是dual

where子句

where子句用于筛选条件,对数据(记录)进行逐行判断,返回是一个类似布尔的结果。

where原理

只有where操作的时候,是直接在磁盘上对数据进行判断,where之后的所有子句都是对内存中的数据进行操作

补充知识

mysql中没有布尔类型,但是却“支持”布尔类型,是内部会进行数据转换,识别关键字

where判断:返回的结果是布尔类型

比较运算:=,>,>=,<,<=,between 左边较小 and 较大,in,is null/is not null

逻辑运算:&&and和||or,用于多条件联合判断

模糊匹配:like ‘patter’,匹配符:%和_

时间: 2025-01-06 14:35:09

20150102--Mysql外键+增删改查-02的相关文章

Sql中常用的创建表 约束 主外键 增删改查的语句

创建数据库 1 USE master; 2 GO 3 --日记数据库 4 create database DiaryBase 5 on 6 ( 7 name=DiaryBase_Dat,--逻辑名称 8 FILENAME='c:\DiaryBase.log', 9 size=10MB, 10 maxsize=50MB, 11 FILEGROWTH=5MB 12 ) 13 log on 14 ( 15 name=DiaryBase_Log, 16 FILENAME='c:\DiaryBase.md

20150102--Mysql外键+增删改查-01

回顾 校对集:校对集必须事先设置好,修改无效 乱码问题:三码合一,通过php设置数据库和浏览器的编码 存储引擎:数据库数据的存储方式 数据类型:数值型,字符串型和时间日期型 数值型:整型,小数型(浮点和定点) 字符串型:定长,变长,文本,枚举和集合 时间日期型:时间日期,日期,时间,时间戳(以时间戳时间为起始单位的时间日期),年 列属性:null,default,primary key,auto_increment 列属性 注释 注释不是指普通的注释,让系统(服务器)自动的去忽略无效代码.真正的

java jdbc 连接mysql数据库 实现增删改查

好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打交道非常基础的一个知识,也是比较接近底层的,在实际的工作中大家用得更多的其实还是比较成熟的框架,例如Hibernate.Mybatis. 但是作为这些成熟框架的底层的jdbc却也是我们应该去掌握的,只有了解了jdbc的增删改查,这样在以后如果有兴趣去研究Hibernate或者Mybatis的源代码的

Windows下安装MySQLdb, Python操作MySQL数据库的增删改查

这里的前提是windows上已经安装了MySQL数据库,且配置完毕,能正常建表能操作.在此基础上只需安装MySQL-python-1.2.4b4.win32-py2.7.exe就ok了,只有1M多.这个有点类似jdbc里的那个jar包. 下载链接:http://sourceforge.net/projects/mysql-python/ , 百度云盘 :http://pan.baidu.com/s/1dDgnfpR 密码:7bna 接着import MySQLdb就能使用了,下面给出测试代码:

【Mysql】Java中对Mysql数据库的增删改查、Java的System类

这部分也是所谓JDBC.网站数据源的内容,把名字弄得很高深似得,实际上只是Java中对Mysql数据库的增删改查的内容.非常简单,之前写了这么多Mysql的内容,没好好总结一下,实在是不应该.今天就实现一个Java中对Mysql数据库的增删改查,随便带点Java取出当前系统的系统名与系统时间的知识,完成一个还算有点意思的小例子. 一.基本目标 首先,在Mysql数据库中有一张名为testtable的空表,id为自增列,username,class都是文本列,但是class里面都存放数字,也就是整

MYSQL所有的增删改查等等语句,作为程序员的你,够用了

MYSQL的常用命令和增删改查语句和数据类型 连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码]   创建数据库:create database [库名]   显示所有数据库: show databases;   打开数据库:use [库名]   当前选择的库状态:SELECT DATABASE();   创建数据表:CREATE TABLE [表名]([字段名] [字段类型]([字段要求]) [字段参数], ......);   显示数据表字段:describe 表名; 

mysql数据库的增删改查语句

连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码] 创建数据库:create database [库名] 显示所有数据库: show databases; 打开数据库:use [库名] 当前选择的库状态:SELECT DATABASE(); 创建数据表:CREATE TABLE [表名]([字段名] [字段类型]([字段要求]) [字段参数], ......); 显示数据表字段:describe 表名; 当前库数据表结构:show tables; =============

mysql 命令行增删改查

1.mysql数据库的连接与关闭 连接数据库: mysql -h 服务器主机地址 -u 用户名 -p密码 关闭连接: 在任何时候输入exit或quit 2.创建新用户并授权 grant 权限 on 数据库.数据表 to 用户名@登录主机 identified by "密码" **登录主机是指定允许哪个主机登录,一般为了安全,就设为本地localhost **权限包括增删改查  select insert delete update 例:grant all privileges on b

Node 连接Mysql并进行增删改查

NPM: NPM的全称是Node Package Manager,类似于ruby的gem,Python的PyPL.setuptools,PHP的pear,是Nodejs中的包管理器.Nodejs自身提供了基本的模块.但是在这些基本模块上开发实际应用需要较多的工作.NPM上已经有近万个Nodejs库或框架,这些库从各个方面可以帮助Nodejs的开发者完成较为复杂的应用. 安装NPM(Unix下): curl http://npmjs.org/install.sh | sh 利用NPM安装Node模