mysql创建表

数据库表结构设计方法及原则

偶尔善良 提交于 2020-03-12 15:27:33
http://www.cnblogs.com/RunForLove/p/5693986.html 数据库设计的三大范式:为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。   在实际开发中最为常见的设计范式有三个:第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式;第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中;第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。总结一下,就是: 第一范式(确保每列保持原子性); 第二范式(确保表中的每列都和主键相关); 第三范式(确保每列都和主键列直接相关,而不是间接相关)。   在目前的企业信息系统中,数据库还是最佳的数据存储方式,虽然已经有很多的书籍在指导我们进行数据库设计,但应该那种方式是设计数据库的表结构的最好方法、设计时应遵从什么样的原则、四个范式如何能够用一种方式达到顺畅的应用等是我一直在思考和总结的问题

用MySQL创建数据库和数据库表

假装没事ソ 提交于 2020-03-10 19:34:30
1、使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; +----------+ | Database | +----------+ | mysql | | test | +----------+ 3 rows in set (0.00 sec) 2、创建一个数据库abccs mysql> CREATE DATABASE abccs; 注意不同操作系统对大小写的敏感。 3、选择你所创建的数据库 mysql> USE abccs Database changed 此时你已经进入你刚才所建立的数据库abccs. 4、 创建一个数据库表 首先看现在你的数据库中存在什么表: mysql> SHOW TABLES; Empty set (0.00 sec) 说明刚才建立的数据库中还没有数据库表。下面来创建一个数据库表mytable: 我们要建立一个你公司员工的生日表,表的内容包含员工姓名、性别、出生日期、出生城市。 mysql> CREATE TABLE mytable (name VARCHAR(20), sex CHAR(1), -> birth DATE, birthaddr VARCHAR(20)); Query OK, 0 rows affected (0.00 sec) 由于name、birthadd的列值是变化的

MySQL表的增删查改(二)

泪湿孤枕 提交于 2020-03-10 05:25:10
1. 数据库约束 1.约束类型 NOT NULL - 指示某列不能存储 NULL 值。 UNIQUE - 保证某列的每行必须有唯一的值。 DEFAULT - 规定没有给列赋值时的默认值。 PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。 FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。 CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。 用例: #创建学生表 DROP TABLE IF EXISTS student ; CREATE TABLE student ( id INT NOT NULL PRIMARY KEY auto_increment , #NULL可以为空 #NOT NULL 不为空 #PRIMARY KEY 主键约束 #对于整数类型的主键,自增长auto_increment插入数据对应字段不给值时,使用最大值+1 sn INT UNIQUE , #UNIQUE 唯一约束 name VARCHAR ( 20 ) DEFAULT 'unkown' , #DEFAULT默认值 qq_mail VARCHAR ( 20 ) ) ; 2.FOREIGN KEY

MySQL修改表的外键约束

为君一笑 提交于 2020-03-08 19:20:36
创建表 CREATE TABLE parent(id INT NOT NULL, PRIMARY KEY(id))ENGINE=INNODB; CREATE TABLE child(id INT,parent_id INT,FOREIGN KEY(parent_id) REFERENCES parent(id))ENGINE=INNODB; insert into parent(id) values(1); insert into child values(1,1); select * from parent; select * from child; update parent set id = 2 where id = 1; 删除约束 首先查看约束名: show create table child; 则 child_ibfk_1 是外键名称,删除外键 ALTER TABLE child DROP FOREIGN KEY child_ibfk_1 增加约束 ALTER TABLE child ADD CONSTRAINT FOREIGN KEY(parent_id) REFERENCES parent(id); ALTER TABLE child ADD CONSTRAINT KF_PARENT_CHILD FOREIGN KEY(parent_id) REFERENCES

mysql 临时表和内存表

眉间皱痕 提交于 2020-03-07 09:02:53
查看内存表的最大值: show variables like '%heap%';  mysql> show variables like '%heap%'; +---------------------+----------+ | Variable_name | Value | +---------------------+----------+ | max_heap_table_size | 16777216 | +---------------------+----------+ 1 row in set (0.01 sec) 修改方法: 1)启动选项中修改启动mysql的时候加参数 -O max_heap_table_size=32M 2)修改MySQL的配置文件,在[mysqld]的段中增加 max_heap_table_size=32M , 3)MySQL客户端工具中执行命令 set global max_heap_table_size=32777216; 注意 内存表 对于变长数据的处理,例如:varchar(50)这样的字段,对于MyISAM的表结构而言,会按照字段中实际存储的内容计算空间, 而内存表则按照char(50)的方式计算空间,这样就会使内存表占据的空间大幅度上升 内存表不支持like操作,性能是非常的差。 内存表: 1. 参数控制:max_heap

MySQL数据库表的基础操作(增删改查)---讲解一

末鹿安然 提交于 2020-03-06 18:47:56
MySQL环境配置(mysql有下载包) MySQL数据库表的基础操作(增删改查)---讲解一 MySQL数据库表的模糊/多行/分组/排序/分页查询以及字mysql数据类型的讲解---讲解二 MySQL字段约束及多表查询---讲解三 1.数据库概述 1.1 什么是数据库 数据库:存储和管理数据的仓库 数据库是一个专业的存储和管理数据的软件系统,比传统的人工或文件保存数据小路更高、更安全、更可靠。 数据库有哪些分类(了解) 早期:层次是数据库、网络型数据库 现在:==关系型数据库==和非关系型数据库 1.2什么是关系型数据库? 关系型数据库就是底层以二维表的形式保存数据的库就是关系型数据库 保存学生信息(student表) 编号 | 姓名 | 成绩 -------- | ----- |----- 1 | 王二妮|88 2 | 李铁柱 |74 3 | 陈翠花|97 常见的关系型数据库有哪些?(了解) SqlServer: 微软提供、适用于中型、大型的项目中,收费,在Java中的使用占比不高(不超过10%) .NET Oracle: 甲骨文公司提供、适用于大型、超大型的项目中,收费,在Java中使用占比非常高- 50%) 性能优异,功能强大。 Mysql:瑞典MYSQLAB公司提供,免费、开源,小巧轻量,在Java中占比约为20% 被甲骨文公司收购了。Mariadb DB2:

MySQL数据库篇之多表查询

試著忘記壹切 提交于 2020-03-05 15:16:28
主要内容:    一、多表连接查询   二、复合条件连接查询   三、子查询 1️⃣ 多表连接查询    一、准备表  #建表 create table department( id int, name varchar(20) ); create table emp( 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 empl(name,sex,age,dep_id) values ('egon','male',18,200), ('alex','female',48,201), ('wupeiqi','male',38,201), ('yuanhao','female',28,202), ('liwenzhou','male',18,200), ('jingliyang','female',18,204) ; #查看表结构和数据 mysql> desc department; +----

mysql--多表连接查询

最后都变了- 提交于 2020-03-05 15:15:19
一.多表连接查询 SELECT 字段列表 FROM 表1 INNER|LEFT|RIGHT JOIN 表2 ON 表1.字段 = 表2.字段;   1.交叉连接:不适用任何匹配条件.生成笛卡尔积 select * from department,employee; #表用逗号分隔,看我查询时表的顺序,先department后employee,所以你看结果表的这些字段,是不是就是我们两个表字段并且哪个表在前面,哪个表的字段就在前面   2.内连接:只连接匹配的行 select * from employee,department where employee.dep_id=department.id;   3.外连接: 左连接 优先显示左表全部记录 #本质就是:在内连接的基础上增加左边有右边没有的结果 #注意语法: select employee.id,employee.name,department.name as depart_name from employee left join department on employee.dep_id=department.id;   4.外连接: 右连接 有限显示右表全部记录 本质就是:在内连接的基础上增加右边有左边没有的结果 select employee.id,employee.name,department.name as

MySQL 复制表:如何准确无误的创建复制表?

和自甴很熟 提交于 2020-03-04 10:26:25
MySQL 复制表 如果我们需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等。 如果仅仅使用 CREATE TABLE ... SELECT 命令,是无法实现的。 本章节将为大家介绍如何完整的复制MySQL数据表,步骤如下: 使用 SHOW CREATE TABLE 命令获取创建数据表( CREATE TABLE ) 语句,该语句包含了原数据表的结构,索引等。 复制以下命令显示的SQL语句,修改数据表名,并执行SQL语句,通过以上命令 将完全的复制数据表结构。 如果你想复制表的内容,你就可以使用 INSERT INTO ... SELECT 语句来实现。 实例 尝试以下实例来复制表 runoob_tbl 。 步骤一: 获取数据表的完整结构。 mysql> SHOW CREATE TABLE runoob_tbl \G; *************************** 1. row *************************** Table: runoob_tbl Create Table: CREATE TABLE `runoob_tbl` ( `runoob_id` int(11) NOT NULL auto_increment, `runoob_title` varchar(100) NOT NULL default '', `runoob

mysql跨库联表查询

二次信任 提交于 2020-03-03 18:35:12
业务场景:关联不同数据库中的表的查询 比如说,要关联的表是:机器A上的数据库A中的表A && 机器B上的数据库B中的表B。 这种情况下,想执行“select A.id,B.id from A left join B on ~~~;“那是不可能的,但业务需求不可变,数据库设计不可变,这就蛋疼了。。 解决方案:在机器A上的数据库A中建一个表B。。。 这当然不是跟你开玩笑啦,我们采用的是 基于 MySQL 的federated引擎的建表方式 。 建表语句示例: CREATE TABLE `table_name`(......) ENGINE =FEDERATED CONNECTION='mysql://[username]:[password]@[location]:[port]/[db-name]/[table-name]' 前提条件:你的mysql得支持federated引擎(执行show engines;可以看到是否支持)。 如果有FEDERATED引擎,但Support是NO,说明你的mysql安装了这个引擎,但没启用,去my.cnf文件末添加一行 federated ,重启mysql即可; 如果压根就没有FEDERATED这一行,说明你的mysql就没有安装这个引擎,这就不能愉快的玩耍了,最好去找你们家运维搞定吧,因为接下来的动作比较大,而且我也不知道怎么搞; 解释