35.1、数据库之库操作:

1、创建数据库(在磁盘上创建一个对应的文件夹):

create database [if not exists] db_name [character set xxx];

2、查看数据库:

show databases;

#查看所有数据库

show create database db_name;

#查看数据库的创建方式

3、修改数据库:

alter database db_name [character set xxx];

4、删除数据库:

drop database [if exists] db_name;

5、切换数据库:

use db_name;

#注意:进入到某个数据库后没办法再退回之前状态,但可以通过use进行切换,查看当前使用的数据库select database();

35.2、mysql数据库类型:

MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

1、数值类型:

下面的表显示了需要的每个整数类型的存储和范围。

2、日期和时间类型:

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

3、字符串类型:

(1)说明:

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。

该节描述了这些类型如何工作以及如何在查询中使用这些类型。

(2)补充:

1)CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

2)BINARY和VARBINARY类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。

3)BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。

4)有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度。

35.3、数据库表操作:

1、创建表(类似于一个excel表):

create table tab_name(

field1 type [完整性约束条件] [comment <注释内容>],

field2 type,

...

fieldn type

)[CHARACTER SET XXX,ENGINE=INNODB];

(1)创建一个员工表employee:

create table employee(

id int primary key auto_increment,

name varchar(20),

gender bit default 1,

-- gender char(1) default 1 或者 TINYINT(1)

birthday date,

entry_date date,

job varchar(20),

salary double(4,2) unsigned,

resume text

/*注意,这里作为最后一个字段不加逗号*/

);

(2)约束:

primary key

#非空且唯一,能够唯一区分出当前记录的字段称为主键!

auto_increment

#自动增加,主键字段必须是数字类型。

unique

#值唯一

not null

#值不为空

foreign key

#外键约束

2、查看表信息:

desc tab_name

show columns from tab_name

#查看表结构

show tables

#查看当前数据库中的所有的表

show create table tab_name

#查看当前数据库表建表语句

3、修改表结构:

(1)增加列(字段):

alter table tab_name add [column] 列名 类型[完整性约束条件][first|after 字段名];

alter table user add addr varchar(20) not null unique after username;

#添加单个字段

alter table user add addr varchar(20), add age int first, add birth varchar(20) after name;

#添加多个字段

(2)修改一列类型:

alter table tab_name modify 列名 类型 [完整性约束条件][first|after 字段名];

alter table user modify age tinyint default 20;

alter table user modify age int after id;

(3)修改列名:

alter table tab_name change [column] 列名 新列名 类型 [完整性约束条件][first|after 字段名];

alter table user change age Age int default 28 first;

(4)删除列:

alter table tab_name drop [column] 列名;

alter table user add salary float(6,2) unique not null after name, drop addr;

(5)修改表名:

rename table 表名 to 新表名;

(6)修改表所用的字符集:

alter table table_name character set utf8;

(7)注意:

对表的列进行操作时根据需要加上"类型 [完整性约束条件][first|after 字段名]"条件,否则表列的类型和

约束会发生变化。

4、删除表:

drop table tab_name;

5、主键操作:

(1)添加主键:

alter table tab_name add primary key(字段名称,...)

mysql> create table test(num int auto_increment);

ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

mysql> create table test(num int primary key auto_increment);

(2)删除主键:

alter table test modify id int;

#auto_increment没了,但这样写主键依然存在,所以还要加上下面这句才能删除主键。

alter table test drop primary key;

#仅仅用这句无法直接删除主键

6、索引操作:

(1)索引简介:

1)索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于

数据库良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于数据库性能的影响

愈发重要。

2)索引优化应该是对数据库查询性能优化最有效的手段了。

3)索引能够轻易将数据库查询性能提高好几个数量级。

4)索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。

5)索引特点:创建与维护索引会消耗很多时间和磁盘空间,但查询速度大大提高。

(2)创建表时添加索引:

1)语法:

CREATE TABLE 表名 (

字段名1 数据类型 [完整性约束条件…],

字段名2 数据类型 [完整性约束条件…],

[UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY

[索引名] (字段名[(长度)] [ASC|DESC])

);

2)创建普通索引示例:

--创建:

CREATE TABLE emp1 (

id INT,

name VARCHAR(30),

resume VARCHAR(50),

INDEX index_emp1_name(name)

/*KEY index_emp1_name(name)*/

/*普通索引*/

);

--查看索引:

mysql> show index from emp1\G;

3)创建唯一索引示例:

--创建:

CREATE TABLE emp2 (

id INT,

name VARCHAR(30),

bank_num CHAR(18) UNIQUE,

/*唯一索引*/

resume VARCHAR(50),

UNIQUE INDEX index_emp2_name(name)

/*唯一索引*/

);

--查看索引:

mysql> show index from emp2\G;

4)创建全文索引示例:

说明:在MySQL5.6之前,只有MyISAM引擎支持全文索引,我这里使用的是MySQL

5.6、innodb引擎。

--创建:

CREATE TABLE emp3 (

id INT,

name VARCHAR(30),

resume VARCHAR(50),

FULLTEXT INDEX index_emp3_resume(name)

/*全文索引*/

);

--查看索引:

mysql> show index from emp3\G;

5)创建多列索引示例:

--创建:

CREATE TABLE emp4 (

id INT,

name VARCHAR(30) ,

resume VARCHAR(50),

INDEX index_emp4_name_resume(name,resume)

/*联合索引*/

);

--查看索引:

mysql> show index from emp4\G;

(3)使用CREATE在已存在的表上创建索引:

1)语法:

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名 ON 表名(字段名[(长度)] [ASC | DESC]);

2)示例:

--创建:

CREATE INDEX index_emp1_resume ON emp1(resume);

--查看索引:

mysql> show index from emp1\G;

(4)ALTER TABLE在已存在的表上创建索引:

1)语法:

ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名(字段名[(长度)] [ASC | DESC]);

2)示例:

--创建:

ALTER TABLE emp2 ADD UNIQUE INDEX index_emp2_resume(resume);

--查看:

mysql> show index from emp2\G;

(5)删除索引:

1)语法:DROP INDEX 索引名 on 表名;

2)示例:

DROP INDEX index_emp1_resume on emp1;

DROP INDEX index_emp2_resume on emp2;

(6)索引测试实验:

1)创建试验数据:

--创建表:

create table index_test(id int,name varchar(20));

--创建数据:

delimiter //

create procedure autoinsert()

BEGIN

declare i int default 1;

while(i<=500000) do

insert into index_test values(i,'lc');

set i=i+1;

end while;

END //

delimiter;

--调用函数:

call autoinsert();

--执行完成后删除函数:

drop PROCEDURE autoinsert;

2)花费时间比较:

--创建索引前:

select * from index_test where id=300000; --0.32s

--添加索引:

create index index_index_test_id on index_test(id);

--创建索引后:

select * from index_test where id=300000; --0.00s

7、创建文章表:

create table article(

id int primary key auto_increment,

title varchar(20),

publish_date INT,

click_num INT,

is_top TINYINT(1),

content TEXT

);

8、完整性约束条件之主键约束:

一张表只能有一个主键。

主键类型不一定非是整型。

(1)单字段主键:

create table user(

id INT primary key,

name varchar(20),

city varchar(20)

);

(2)多字段联合主键:

create table user(

id INT,

name varchar(20),

city varchar(20),

primary key(name,id)

);

9、外键约束:

(1)说明:

每一个班主任会对应多个学生 , 而每个学生只能对应一个班主任。

(2)创建主表并插入数据:

1)创建主表:

CREATE TABLE ClassCharger(

id int PRIMARY KEY auto_increment,

name VARCHAR(20) not null,

age TINYINT,

is_marriged boolean

/*show create table ClassCharger: tinyint(4)*/

);

2)插入数据:

INSERT INTO ClassCharger(name,age,is_marriged) VALUES("冰冰",12,0),

("丹丹",14,0),

("歪歪",22,0),

("姗姗",20,0),

("小雨",21,0);

(3)创建子表并插入数据:

1)创建子表:

CREATE TABLE Student(

id INT PRIMARY KEY auto_increment,

name VARCHAR(20) not null,

charger_id INT,

/*切记,作为外键一定要和关联主键的数据类型保持一致。*/

FOREIGN KEY(charger_id) REFERENCES ClassCharger(id)

);

2)子表插入数据:

INSERT INTO Student(name,charger_id) VALUES("alvin1",2),

("alvin2",4),

("alvin3",1),

("alvin4",3),

("alvin5",1),

("alvin6",3),

("alvin7",2);

(3)测试:

1)DELETE FROM ClassCharger WHERE name="冰冰";

#当子表中的记录引用主表中的记录时,是无法删除主表中的记录的。

2)INSERT student(name,charger_id) VALUES("yuan",1);

#在子表中插入数据

(4)补充:

1)增加外键:

ALTER TABLE student ADD CONSTRAINT classcharger_fk_student FOREIGN KEY(charger_id) REFERENCES classcharger(id);

2)删除外键:

ALTER TABLE student DROP FOREIGN KEY classcharger_fk_student;

10、INNODB支持的ON语句:

(1)外键约束对子表的含义:

如果在父表中找不到候选键,则不允许在子表上进行insert/update。

(2)外键约束对父表的含义:

在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹配行的候选键时,父表的行为取决于在定义子表的外键时指定的

on update/on delete子句。

(3)innodb支持的四种方式(默认情况下,mysql的外键约束类型是restrict(no action)类型):

1)cascade方式:

在父表上update/delete记录时,同步update/delete掉子表的匹配记录。

外键的级联删除,如果父表中的记录被删除,则子表中对应的记录自动被删除。

语法:

FOREIGN KEY (charger_id) REFERENCES ClassCharger(id) ON DELETE CASCADE

2)set null方式:

在父表上update/delete记录时,将子表上匹配记录的列设为null,要注意子表的外键列不能为not null。

语法:

FOREIGN KEY (charger_id) REFERENCES ClassCharger(id) ON DELETE SET NULL

3)No action方式:

如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作。

4)Restrict方式 :

同no action, 都是立即检查外键约束。

5)补充:

Set default方式:父表有变更时,子表将外键列设置成一个默认的值,要注意子表的外键要有默认值。

Innodb不能识别该约束。

35、mysql数据库(ddl)的更多相关文章

  1. Mysql 数据库操作之DDL、DML、DQL语句操作

    Mysql 数据库操作之DDL.DML.DQL语句操作 设置数据库用户名密码 l  Show databases 查看数据库列表信息 l  查看数据库中的数据表信息 ,格式: use 数据库名: sh ...

  2. 第1 章 mysql数据库之简单的DDL和DML sql语句

    一.SQL 介绍 1.什么是sql? SQL,英文全称(Structured Query Language),中文是结构化查询语言,它是一种对关系数据库中数据进行定义和操作的语言方法,是大多数关系数据 ...

  3. MySQL数据库之DDL(数据定义语言)

    1.MySQL数据库之DDL创建.删除.切换 (1)查看所有数据库 show databases: (2)切换数据库 use 数据库名: (3)创建数据库 create database 数据库名: ...

  4. 50多条mysql数据库优化建议

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存 ...

  5. 一个小时学会MySQL数据库

    随着移动互联网的结束与人工智能的到来大数据变成越来越重要,下一个成功者应该是拥有海量数据的,数据与数据库你应该知道. 一.数据库概要 数据库(Database)是存储与管理数据的软件系统,就像一个存入 ...

  6. MySQL数据库基础学习

    MySQL基础知识 ----------- MySQL数据库简介 内存:一断电数据就没有了---------数据库:可以实现数据的持久化存储,有完整的管理系统管理,方便查询--------- DB:数 ...

  7. 【转载】一个小时学会MySQL数据库

    一个小时学会MySQL数据库   目录 一.数据库概要 1.1.发展历史 1.1.1.人工处理阶段 1.1.2.文件系统 1.1.3.数据库管理系统 1.2.常见数据库技术品牌.服务与架构 1.3.数 ...

  8. MySQL数据库之part1

    一.初始数据库 链接:http://www.cnblogs.com/linhaifeng/articles/7126847.html 一.MySQL介绍 1.MySQL是什么 MySQL是一个关系型数 ...

  9. 超全面的JavaWeb笔记day15<mysql数据库>

    1.数据库的概述 2.SQL 3.DDL 4.DML 5.DCL 6.DQL MySQL 数据库 1 数据库概念(了解) 1.1 什么是数据库 数据库就是用来存储和管理数据的仓库! 数据库存储数据的优 ...

随机推荐

  1. Linux是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的性能稳定的操作系统,可免费使用并自由传播。

    Linux是一个基于POSIX和Unix的多用户.多任务.支持多线程和多CPU的性能稳定的操作系统,可免费使用并自由传播. Linux是众多操作系统之一 , 目前流行的服务器和 PC 端操作系统有 L ...

  2. 055.Python前端Django模型ORM

    由于前面在centos实验的过程中,pymql一直有属性错误,很难排查出问题,重新做了一个ubuntu的桌面系统同时使用pycharm开发工具作为学习开发工具,具体原因是因为在项目命名出现问题,和自己 ...

  3. mysql示例及练习2

    #创建数据库并应用create database shopdb;use shopdb;#创建表customerscreate table customers(c_id int primary key ...

  4. tkinter是内置的模块,不同的版本的导入形式不同,现总结如下

    #coding=utf-8 import os, sys try: from tkinter import * except ImportError: #Python 2.x PythonVersio ...

  5. Python数模笔记-StatsModels 统计回归(1)简介

    1.关于 StatsModels statsmodels(http://www.statsmodels.org)是一个Python库,用于拟合多种统计模型,执行统计测试以及数据探索和可视化. 2.文档 ...

  6. 【Python】神器:Streamlit,仅使用Python开发一个运维管理后台(不需要编写html,js,css)

    背景 作为SRE,我们有很多很多自动化的工具,大部分都是自动运行的,还有一部分是CLI,我们一直苦于没有一个自己的管理后台网站,受限于前端能力薄弱,开发出来的网页只能说凑活能用,但是不好用. 现在我们 ...

  7. TVM自动调度器

    TVM自动调度器 随着模型大小,算子多样性和硬件异构性的不断增长,优化深度神经网络的执行速度非常困难.从计算的角度来看,深度神经网络只是张量计算的一层又一层.这些张量计算(例如matmul和conv2 ...

  8. VB 老旧版本维护系列---有点懵逼的webserver访问

    有点懵逼的webserver访问 '定义webserver地址 Dim postUrl As String = "" '定义webserver所需xml字符串参数 Dim xmlR ...

  9. Excel创建序列号1000个

    一.输入1,并且选择 二.开始-填充 三.选择序列 四.选择列-等差序列-步张值输入1 终止值输入1000 点击确定 五.查看结果,选中这一列 六.快捷键 Ctrl+下键 则跳转到最下方,上键则是最上 ...

  10. 从简单示例看对象的创建过程, 为什么双重检查的单例模式,分析Volatile关键字不能少

    编译指令 :javac Test.java 反编译指令: javap -v Test 代码 public class ObjectTest { int m = 8; public static voi ...