mysql数据库基础(2)索引、主键、复合主键、外键

增、删、改、查

加“”表示为普通字符

mysql> insert into  t9 values("NULL",21,"game,flim");

+++++++++++++++++++++++++++++++

添加新字段

mysql> alter table  t4 add age int(2) default 19;        //默认在最后面

mysql> alter table  t4 add mail char(50) after name;   //加在name后面

mysql> alter table  t4 add stu_num char(10) first;      //加在最前面

修改字段类型 ,类型要与字段存储的数据匹配,不能有冲突.

mysql> alter table  t4 modify name varchar(3);

ERROR 1406 (22001): Data too long for column ‘name‘ at row 1

mysql> alter table  t4 modify name varchar(15);

Query OK, 1 row affected (0.44 sec)

修改字段位置

mysql> alter table  t4  modify age int(2) default  19

after name;

删除字段

mysql> alter table  t5 drop start;

mysql> select  * from t5;

mysql> desc  t5;

修改字段名

alter table  t4 change stu_num stu_id char(10);

修改表名

alter table   t9 rename stuinfo;

应用

mysql> create table t7(meeting datetime,party timestamp);

不自动赋值      会自动赋值当前时间

mysql> insert into t7 values(now(),now());

Query OK, 1 row affected (0.07 sec)

mysql> select * from t7;

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

| meeting             | party               |

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

| 2018-10-16 09:31:50 | 2018-10-16 09:31:50 |

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

mysql> insert into t7(meeting) values(now());

mysql> select * from t7;

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

| meeting             | party               |

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

| 2018-10-16 09:31:50 | 2018-10-16 09:31:50 |

| 2018-10-16 09:33:12 | 2018-10-16 09:33:12 |

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

mysql> select * from t7;

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

| meeting             | party               |

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

| 2018-10-16 09:31:50 | 2018-10-16 09:31:50 |

| 2018-10-16 09:33:12 | 2018-10-16 09:33:12 |

| 2018-10-17 08:25:00 | 2018-10-16 09:34:01 |

| NULL                | 2018-10-17 08:25:00 |

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

mysql> desc teadb.t5;

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

| Field    | Type     | Null | Key | Default | Extra |

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

| name     | char(10) | YES  |     | NULL    |       |

| birthday | date     | YES  |     | NULL    |       |

| start    | year(4)  | YES  |     | NULL    |       |

| uptime   | time     | YES  |     | NULL    |       |

| party    | datetime | YES  |     | NULL    |       |

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

mysql> insert into t5(name,start) values("tom",50);

mysql> select * from t5;

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

| name | birthday   | start | uptime   | party               |

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

| bob  | 1993-07-02 |  1993 | 08:30:00 | 2018-10-15 20:30:00 |

| tom  | NULL       |  2050 | NULL     | NULL                |

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

//year默认为4位数,1-69--->20   70-99--->19

mysql> create table t88(name char(3),level int(3) zerofill);    //显示宽度,0补足位

Query OK, 0 rows affected (0.25 sec)

mysql> insert into t88 values("tom",1131);

mysql> insert into t88 values("tom",113);

mysql> insert into t88 values("tom",11);

mysql> insert into t88 values("tom",3);

mysql> select * from t88;

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

| name | level |

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

| tom  |  1131 |

| tom  |   113 |

| tom  |   011 |

| tom  |   003 |

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

mysql> create table t9(name char(10) not null,age tinyint(2) default 19,likes set("eat","sleep","film","game") not null default "game,eat");

//no null:不能为空值 ,默认可以为空   //detault:默认值

mysql> insert into t9(name) values("bob");

Query OK, 1 row affected (0.02 sec)

mysql> select * from t9;

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

| name | age  |    likes   |

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

| bob  |   19 | game,eat  |

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

mysql> desc t9;

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

| Field | Type                             | Null | Key | Default | Extra |

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

| name | char(10)                          | NO |   | NULL   |     |

| age  | tinyint(2)                         | YES |   | 19     |     |

| likes  | set(‘eat‘,‘sleep‘,‘film‘,‘game‘)         | NO |   | game  |     |

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

//不输入会默认补内容

添加字段 默认在最后

mysql> alter table t4 add nanjing int(2) default 22;

mysql> select * from t4;

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

| stu_id | name | age  | mail | homedir | nanjing |

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

| NULL   | jack |   19 | NULL | USA     |      22 |

| NULL   | lll  |   19 | NULL | han     |      22 |

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

索引

索引是指给字段排队,类似书的目录

优点:可以加快查询数据速度

缺点:减慢写入的速度,增加减少都需要重新排列。排队信息需要文件来存储,占内存

平时我们看不到排序,查询时直接会提示数据在几行。

创建表的时候添加索引:  //可同时添加多个索引

mysql> create table t12( name char(10),class char(7),age int(2) , index(name),index(class));

mysql> desc t12;

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

| Field | Type     | Null | Key | Default | Extra |

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

| name  | char(10) | YES  | MUL | NULL    |       |

| class | char(7)  | YES  | MUL | NULL    |       |

| age   | int(2)   | YES  |     | NULL    |       |

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

mysql> show index from t12\G;       //查看索引

mysql> drop index name on t12;         //删除索引

mysql> desc t12;

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

| Field | Type     | Null | Key | Default | Extra |

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

| name  | char(10) | YES  |     | NULL    |       |

| class | char(7)  | YES  | MUL | NULL    |       |

| age   | int(2)   | YES  |     | NULL    |       |

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

mysql> create index name on t12(name);    //在已有的表里添加索引,索引名与表名一致

mysql> desc t12;

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

| Field | Type     | Null | Key | Default | Extra |

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

| name  | char(10) | YES  | MUL | NULL    |       |

| class | char(7)  | YES  | MUL | NULL    |       |

| age   | int(2)   | YES  |     | NULL    |       |

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

创建主键的格式1

mysql> create table t22(name char(10),stu_num char(9),primary key(stu_num));

创建主键的格式2(同上)

mysql> create table t23(name char(10),stu_num char(9)primary key);

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

| Field   | Type     | Null | Key | Default | Extra |

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

| name    | char(10) | YES  |     | NULL    |       |

| stu_num | char(9)  | NO   | PRI | NULL    |       |

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

mysql> select * from t22;

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

| name | stu_num   |

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

| tom  | nsd180705 |           //设值主键字段(stu_num)值不于允许重复,不能为空

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

复合主键(表中多个字段一起做主键,表中多行设符合主键不能重复不能为空)

mysql> create table t24(cip char(15),sport smallint(2),status enum("deny","all"),primary key(cip,sport));

mysql> select * from t24;

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

| cip         | sport | status |

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

| 192.168.4.1 |    21 | deny   |

| 192.168.4.1 |    22 | deny   |

| 192.168.4.2 |    22 | deny   |

| 192.168.4.3 |    22 | all    |

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

删除主键,不删除内容,还是不能为空,表将不受约束

mysql> alter table t24 drop primary key;               //删除

在已有表里创建复合主建(如果表中有重复的数据不能创建,需要先改表)

mysql> alter table t24 add primary key(cip,sport);      //创建

主键+自增长(自己存亦遵循约束规则//空值,重复)//自增长从最大的开始

//删除也从历史最大值开始记录

mysql> create table t25(stu_id int primary key auto_increment,name char(5),age tinyint(2) unsigned);                                   自加1

mysql> desc t25;

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

| Field  | Type                | Null | Key | Default | Extra          |

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

| stu_id | int(11)             | NO   | PRI | NULL    | auto_increment |

| name   | char(5)             | YES  |     | NULL    |                |

| age    | tinyint(2) unsigned | YES  |     | NULL    |                |

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

mysql> insert into t25(name,age)values("bob",19);

mysql> insert into t25(name,age)values("tom",18);

mysql> select * from t25;

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

| stu_id | name | age  |

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

|      1 | bob  |   19 |

|      2 | tom  |   18 |                   //自加一

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

mysql> alter table t88 add id int(2) zerofill primary key auto_increment first;

mysql> select * from t88;

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

| id | name | level |

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

| 01 | tom  |  1131 |

| 02 | tom  |   113 |

| 03 | tom  |   011 |

| 04 | tom  |   003 |

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

先珊自增字段才能珊主键

mysql> alter table t25 modify stu_id int(2) not null;         //先删除自增长段

mysql> desc t25;

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

| Field  | Type                | Null | Key | Default | Extra |

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

| stu_id | int(2)              | NO   | PRI | NULL    |       |  //原来有auto_increment

| name   | char(5)             | YES  |     | NULL    |       |

| age    | tinyint(2) unsigned | YES  |     | NULL    |       |

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

mysql> alter table t25 drop primary key;              //珊主键

mysql> desc t25;

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

| Field  | Type                | Null | Key | Default | Extra |

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

| stu_id | int(2)              | NO   |     | NULL    |       |

| name   | char(5)             | YES  |     | NULL    |       |

| age    | tinyint(2) unsigned | YES  |     | NULL    |       |

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

外键

定义:让当前表字段的值在另一个表中字段值的范围内选择,保证数据的一致性。

使用外键的条件:

表的存储引擎必须是innodb

字段类型要一致

被参照字段必须要是索引类型的一种(primary key)

mysql> create table ygtab(yg_id int(2)primary key auto_increment,naem char(10)) engine=innodb;

mysql> insert into ygtab(naem)values("bob");

mysql> insert into ygtab(naem)values("tom");

mysql> create table gztab(gz_id int(2),pay float(7,2),foreign key(gz_id) references ygtab(yg_id)on update cascade on delete cascade)engine=innodb;

//regerences:引用  foreign key:外键

mysql> desc gztab;

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

| Field | Type       | Null | Key | Default | Extra |

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

| gz_id | int(2)     | YES  | MUL | NULL    |       |

| pay   | float(7,2) | YES  |     | NULL    |       |

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

准备案例:

mysql> insert into gztab values(1,28000);

mysql> insert into gztab values(2,38000);

mysql> select * from ygtab;

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

| yg_id | naem |

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

|     1 | bob  |

|     2 | tom  |

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

mysql> select * from gztab;

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

| gz_id | pay      |

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

|     1 | 28000.00 |

|     2 | 38000.00 |

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

//改参考的员工表字段,自己表应该也同部更新  //单向同步

mysql> update ygtab set yg_id=8 where yg_id=2;

mysql> select * from gztab;

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

| gz_id | pay      |

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

|     1 | 28000.00 |

|     8 | 38000.00 |

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

2 rows in set (0.00 sec)

mysql> select * from ygtab;

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

| yg_id | naem |

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

|     1 | bob  |

|     8 | tom  |

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

mysql> delete from ygtab where yg_id=8;          //删除员工表信息

mysql> select * from gztab;                     //工资表信息自动删除

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

| gz_id | pay      |

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

|     1 | 28000.00 |

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

1 row in set (0.00 sec)

//有利有弊

//有bug,gz_id 需要做主键不然可以连发工资,因为参考表有记录,被参考的表无法删除,需要先删除外键,再删除表(主键还在)

原文地址:https://www.cnblogs.com/hanlongyu/p/9807423.html

时间: 2024-10-02 03:14:09

mysql数据库基础(2)索引、主键、复合主键、外键的相关文章

MySQL数据库基础(二)(约束以及修改数据表)(持续更新中)

一,约束以及修改数据表 约束的作用?1.约束保证数据的完整性.一致性:2.约束分为表级约束.列级约束:3.约束类型包括:NOT NULL(非空约束).PRIMARY KEY(主键约束).UNIQUE KEY(唯一约束).DEFAULT(默认约束).FOREIGN KEY(外键约束): 列级约束:只针对某一个字段:表级约束:针对两个或两个以上的字段: 1.外键约束的要求解析 外键约束作用:1.保持数据一致性.完整性:2.实现一对一或一对多关系:(这是也把MySQL称之为"关系型"数据库的

MySQL数据库基础知识

day02 MySQL数据库基础知识 一.基础知识概述: 基础决定你这门课程的学习成败!只有学习好这些基础知识以后,你才能真正的运用自如.才能够对数据库有更深入的了解,道路才会越走越远. 二.基础知识: 1.数据库(database):数据库就好比是一个物理的文档柜,一个容器,把我们整理好的数据表等等归纳起来. 创建数据库命令:        create database 数据库名; 2.查看数据库         show databases; 3.打开指定的数据库         use 

MySQL数据库基础(三)——SQL语言

MySQL数据库基础(三)--SQL语言 一.SQL语言简介 1.SQL语言简介 SQL是结构化查询语言(Structured Query Language),是用于访问和处理数据库的标准的计算机语言.SQL语言的功能如下:A.SQL面向数据库执行查询B.SQL可从数据库取回数据C.SQL可在数据库中插入新的记录D.SQL可更新数据库中的数据E.SQL可从数据库删除记录F.SQL可创建新数据库G.SQL可在数据库中创建新表H.SQL可在数据库中创建存储过程I.SQL可在数据库中创建视图J.SQL

MySql数据库基础操作——数据库、用户的创建,表的制作、修改等

MySql 是一款使用便捷.轻量级的数据库.因为他体积小.速度快.安装使用简单.开源等优点,目前是使用最广泛的数据库.目前位于Oracle甲骨文公司旗下.那今天我们就来介绍一下数据库的基本操作.具体介绍通过指令的方式来操作数据库. 首先,连接数据库的软件很多,比如说 Navicat 等软件.通过这些软件可以轻松便捷的操作数据库,但是今天的重点不在这. 我们今天普及一下指令操作的方式操作MySql数据库. 我们主要从以下 4 个方面介绍: 1.数据库的 创建.删除.查询 等语句 跳转 2.用户的

MySQL数据库基础(一)——MySQL数据库简介

MySQL数据库基础(一)--MySQL数据库简介 一.MySQL简介 1.MySQL简介 MySQL是一个轻量级关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司.目前MySQL被广泛地应用在Internet上的中小型网站中,由于体积小.速度快.总体拥有成本低,开放源码.免费,一般中小型网站的开发都选择Linux + MySQL作为网站数据库.MySQL是一个关系型数据库管理系统,MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据

JavaWeb Mysql数据库基础知识

1.常用命令 1.1安装数据库  以mysql56为例,存放在d盘,打开cmd,依次输入如下命令:(1)d:(2)cd mysql56(3)cd bin(4)mysqld -install即可安装.1.2启动数据库  在mysql存储的bin目录下输入以下命令:1.3登录数据库  在bin目录下输入以下命令及设置的密码:1.4修改数据库密码  在bin目录下输入以下命令及修改后的密码,如图中的4214963,即为设置的新密码:1.5关闭数据库  在bin目录下输入如下命令:1.6查看系统中的所有

mysql数据库基础(一)

Mysql列子查询及IN,ALL,SOME,ANY的使用 table1: s1 2 10 table2: s2 5 12 20 列子查询中使用IN,ANY,SOME和ALL操作符. IN:在指定项内,同IN(项1,项2,..) ANY:与比较操作符联合使用,接在比较操作符后面表示与子查询返回的任何值比较为TRUE,则返回TRUE. SOME:ANY的别名,较少使用. ALL:与比较操作符联合使用,表示与子查询返回的所有值比较都为TRUE,则返回TRUE. 细节:IN 是 = ANY 的别名,二者

MYSQL数据库基础学习笔记

一.mysql的安装与初始化: 安装mysql命令: yum install -y mysql-server mysql mysql-devel 初始化: service mysqld start   //第一次启动mysqld服务会自动初始化: 创建用户并初始化密码: mysqladmin -u root passwd '密码' 登陆mysql: mysql -u root -p 退出mysql: quit.exit 设置mysqld服务自启动: chkconfig mysqld on mys

MYSQL数据库基础

MySQL数据库基础 本文的所有操作是基于CMD命令行操作方式,且可适当参考<打通MySQL的操作权限>中的内容,该文算是针对前期的环境配置问题提供了一个较为全面的解决方案,与本文是一个相(yao)辅(xiang)相(hu)成(ying)的关系. 一.连接相关 1. 启动MySQL服务器:net start mysql 2. 连接MySQL数据库:mysql -uroot -h127.0.0.1 -ppassword 3. 断开MySQL数据库:连接到MySQL服务器后,可通过在MySQL提示

PHP移动互联网开发笔记(6)——MySQL数据库基础回顾

最近看了一些架构方面的资料,但是发现基础知识都不怎么牢固,接下来的一段时间,我会定期总结基础知识. 一.数据类型 1.整型 数据类型 存储空间 说明 取值范围 TINYINT 1字节 非常小的整数 带符号值:-128~127 无符号值:0~255 SMALLINT 2字节 较小的整数 带符号值:-32768~32767 无符号值:0~65535 MEDIUMNT 3字节 中等大小的整数 带符号值:-8388608~8388607 无符号值:0~16777215 INT 4字节 标准整数 带符号值