mysql外键

《MySQL必知必会》读书笔记_3

烈酒焚心 提交于 2020-03-19 02:47:11
PS:这次的信息量有点大。 聚集不同值 SELECT AVG(DISTINCT prod_price) AS avg_price FROM products WHERE vend_id = 1003 # 相同的值不会被计算 组合聚集函数 SELECT COUNT(*) AS num_items, MIN(prod_price) AS price_min, MAX(prod_price) AS price_max, AVG(prod_price) AS price_avg FROM products 创建分组 # 不创建分组的样子 SELECT vend_id FROM products # 创建分组的样子 SELECT vend_id,COUNT(*) AS num_prods FROM products GROUP BY vend_id P84~P96 主键:唯一标识 外键:某个表的主键值,包含在另一个表中的一列,定义了两个表之间的关系。 PS :外键约束,会导致如果删除表 A 中的一行数据,如果表 A 的主键为表 B 的外键的话,并且表 B 中有数据引用外键为删除数据,那么会删除失败。需要先接触约束,删除表 B 中的数据,才能删除表 A 中的数据。 PS :需要学习数据库范式的概念,才能更加了解书中所说的设计方式。 联结是一种机制,用来在一条 SELECT 语句中关联表

mysql主键和外键约束

筅森魡賤 提交于 2020-03-10 05:09:32
@Adrian 主键: 选取设置主键约束的字段: 主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。主键应该遵守下面的规则: 每个表只能定义一个主键。 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在两行数据有相同的主键值。这是唯一性原则。 一个列名只能在复合主键列表中出现一次。 复合主键不能包含不必要的多余列。当把复合主键的某一列删除后,如果剩下的列构成的主键仍然满足唯一性原则,那么这个复合主键是不正确的。这是最小化原则。 在创建表时设置主键约束: 方法一: <字段名> <数据类型> PRIMARY KEY [默认值] mysql> create table tb_emp3 -> ( -> id int(11) primary key, -> name varchar(25), -> deptId int(11), -> salary float -> ); Query OK, 0 rows affected, 2 warnings (0.78 sec) mysql> desc tb_emp3; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key |

Mysql学习笔记(016)-常见约束

别来无恙 提交于 2020-03-05 18:40:28
常见约束 #常见约束 /* 含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性 分类:六大约束 not null;非空,用于保证该字段的值不能为空 比如姓名,学号等 DEFALUT:默认,用于保证该字段有默认值 比如性别 PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空 比如字段,员工编号等 UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空 比如座位号 CHECK:检查的约束【mysql中不支持】 FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自主表的关联列的值 在从表添加外键约束,用于引用主表中某列的值 比如:主页编号,员工表的部门编号,员工表的工种编号 添加约束的时机: 1、创建表时 2、修改表时 约束的添加分类: 列级约束 六大约束语法上都支持,但外键约束没有效果 表级约束: 除了非空、默认、其他都支持 主键和唯一的大对比: 保证唯一 是否为空 一个表中可以有多少个 是否允许组合 主键 √ × 至多有一个 允许,但不推荐 唯一 √ √ 可以有多个 允许,但不推荐 外键: 1、要求在从表设置外键关系 2、从表外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求 3、主表中的关联列必须是一个key(一般是主键或者唯一键) 4、插入数据时,先插入主表,在插入从表 5、删除数据时,先删除从表

mysql详解

佐手、 提交于 2020-03-01 11:59:43
mysql命令 mysql登录参数: -D, --database 指定数据库 --delimiter 指定分隔符 -h, --host 指定服务器地址 -p, --password 指定密码 -P, --port 指定端口 --prompt 设置提示符 -u, --user 指定用户名 -V, --version 输出版本信息并退出 修改命令提示符: 通过参数指定提示符, mysql -uroot -p123456 --prompt 提示符 通过命令指定提示符, mysql> prompt 提示符; 提示符: \D 完整的日期 \d 当前数据库 \h 服务器名称 \u 当前数据库 常用命令: SELECT VERSION(); 显示当前服务器版本 SELECT NOW(); 显示当前日期时间 SELECT USER(); 显示当前用户 mysql语句规范: 1. 关键字与函数名称全部大写 2. 数据库名称、表名称、字段名称全部小写 3. SQL语句必须以分号结尾 操作数据库 CREATE DATABASE 创建数据库 ALTER DATABASE 修改数据库 DROP DATABASE 删除数据库 创建数据库: {} 为必选项; | 表示或; [] 为可选项。下同 CREATE { DATABASE | SCHEMA } [ IF NOT EXISTS ] db_name [

MySQL DROP所有表,忽略外键

浪尽此生 提交于 2020-03-01 11:44:43
是否有一个很好的简单方法从MySQL数据库中删除所有表,忽略可能存在的任何外键约束? #1楼 这是一个基于游标的解决方案。 有点冗长但作为单个SQL批处理: DROP PROCEDURE IF EXISTS `drop_all_tables`; DELIMITER $$ CREATE PROCEDURE `drop_all_tables`() BEGIN DECLARE _done INT DEFAULT FALSE; DECLARE _tableName VARCHAR(255); DECLARE _cursor CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema = SCHEMA(); DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = TRUE; OPEN _cursor; REPEAT FETCH _cursor INTO _tableName; IF NOT _done THEN SET @stmt_sql = CONCAT('DROP TABLE ', _tableName); PREPARE stmt1 FROM @stmt_sql; EXECUTE stmt1; DEALLOCATE PREPARE stmt1;

MySQL之SQL演练(四)

此生再无相见时 提交于 2020-02-29 15:21:00
一:准备数据 1.创建数据表 -- 创建 "京东" 数据库 create database jing_dong charset=utf8; -- 使用 "京东" 数据库 use jing_dong; -- 创建一个商品goods数据表 create table goods( id int unsigned primary key auto_increment not null, name varchar(150) not null, cate_name varchar(40) not null, brand_name varchar(40) not null, price decimal(10,3) not null default 0, is_show bit not null default 1, is_saleoff bit not null default 0 )default charset=utf8; 2.插入数据 -- 向goods表中插入数据 insert into goods values(0,'r510vc 15.6英寸笔记本','笔记本','华硕','3399',default,default); insert into goods values(0,'y400n 14.0英寸笔记本电脑','笔记本','联想','4999',default,default);

数据库基本操作命令

廉价感情. 提交于 2020-02-20 06:41:29
数据库 数据库的基本概念: MySql DBMS = Database Management System DB的特点 持久化 数据库就是一个文件系统 方便储存和管理 提供统一的操作方式 DB2 IBM的数据库,银行系统常用 SQLite嵌入式小型数据库,手机端和浏览器常用 MySql阿里巴巴版 MariaDB——MySql原作者的另一个产品,底层和MySql一样 两个cmd命令: services.msc 打开windows服务窗口 net start mysql 启动mysql服务 net stop mysql 停止mysql服务 netstat -aon显示端口列表 cmd窗口显示中文乱码问题 切换为UTF-8:chcp 65001 切换回GBK:chcp 936 登录数据库 mysql -uroot -proot (默认连接3306端口) 如果-p之后不写密码,会提示输入密文密码,这样更安全 mysql -h127.0.0.1 -uroot -proot -P端口号 mysql --host=ip --user=root --password=root 两种连接外部数据库的方式 quit 退出数据库 exit; 关闭cmd mysql软件安装目录 my.ini ——mysql的配置文件 mysql的数据目录结构 数据库——文件夹 表——文件 数据——文件中的数据 SQL语句

MySQL学习(二)

房东的猫 提交于 2020-02-09 21:14:23
MySQL数据管理 1、外键 在创建表的时候增加约束 CREATE TABLE `grade`( `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id', `gradename` VARCHAR(50) NOT NULL COMMENT '年级名称', PRIMARY KEY (`gradeid`) )ENGINE=INNODB DEFAULT CHARSET=utf8 -- 学生表的 gradeid 字段 要去引用年级表的 gradeid -- 定义外键key -- 给这个外键添加约束 (执行引用) references 引用 CREATE TABLE IF NOT EXISTS `student` ( `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号', `name` VARCHAR(30) NOT NULL DEFAULT'匿名' COMMENT '名字', `pwd` VARCHAR(20) NOT NULL DEFAULT'123456' COMMENT '密码', `sex` VARCHAR(2) NOT NULL DEFAULT'男' COMMENT '性别', `birthdate` DATETIME DEFAULT NULL COMMENT '出生日期',

MySQL数据库常用语法|JDBC、Template常用方法归纳

大兔子大兔子 提交于 2020-02-04 00:22:18
数据库语法归纳 第一大块:入门四大类别数据库操作(DDL DML DQL DCL) 一、DDL a.数据库 create database if not exists 数据库名 character set 字符编码格式; drop database if exists 数据库名; show databses; select database(); show create database 数据库名; alter database 数据库名 character set 新字符编码格式; use 数据库名; b.表 create table 表名(字段名 字段类型,…); create table 新表名 like 目标表名; drop table 表名; show tables; desc 表名; alter table 表名 rename to 新表名; alter table 表名 字段名 character set 新字段名; alter table 表名 add 字段名 字段数据类型; alter table 表名 modify 字段名 字段新数据类型; alter table 表名 change 字段名 新字段名 字段新数据类型; alter table 表名 drop 字段名; 二、DML insert into [表名(字段名…)] values(字段值);

MySQL数据库详解(一)

穿精又带淫゛_ 提交于 2020-02-02 04:48:58
概述 1.什么是数据库(DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。 2.什么是数据库管理系统 (Database Management SystemDBMS) 一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。 3.数据库的分类 4.数据库与数据库管理系统的关系 MySQL数据库 1.MySQL的安装 1.下载后得到zip压缩包. 2.解压到自己想要安装到的目录,本人解压到的是D:\Environment\mysql-5.7.19 3.添加环境变量 我的电脑->属性->高级->环境变量 选择PATH,在其后面添加: 你的mysql 安装文件下面的bin文件夹 4.在D:\Environment\mysql-5.7.19下新建 my.ini 文件 5.编辑 my.ini 文件 ,注意替换路径位置 1 [mysqld] 2 basedir=D:\Program Files\mysql-5.7\ 3 datadir=D:\Program Files\mysql-5.7\data\ 4 port=3306 5 skip-grant-tables 6