鑫软MySQL命令大全&MySQL命令手册V1.0
最近在学习MySQL,闲(忙)来(得)无(要)事(死)的状态下,我总结了一下自己学习过的MySQL的命令,来总结一下MySQL的基础语句的命令使用,以及基于MySQL与易语言的一款MySQL查询手册!好啦,直接上MySQL命令总结吧!
鑫软MySQL命令 服务名无效解决方法,
使用MySQL过程中会出现在桌面环境下使用dos命令字符启动mysql的时候发现
服务名无效的情况,这个时候需要自己去mysql指定的安装目录下鼠标右键打开>>运行,或者是
运行在此处,再或者,在桌面环境下,使用DOS命令窗口在字符中输入
MySQL的安装路径即:(运行>>输入cmd>>输入mysql的安装路径)
进入到/bin目录下,然后,输入命令:mysqld --install
成功:出现Service successfully install代表你已经安装成功,
不成功:需要你再试一下用管理员身份运行DOS命令窗口
鑫软MySQL命令 连接MySQL,SQL语句,
语法格式: mysql -h主机地址 -u用户名 -p用户密码,
“SHLWAPI”, “#217”, 公开, , SHUnicodeToAnsi
1、例1:连接到本机上的MYSQL。
首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>。
但是如果你是直接在Dekstop桌面上直接打开的dos命令字符(也就是运行>>cmd)这个时候就需要你们2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:mysql -h110.110.110.110 -uroot -pabcd123
(注:u与root可以不用加空格,其它也一样)3、退出MYSQL命令: exit (回车)。
鑫软MySQL命令 MySQL修改密码,
命令的语法格式:mysqladmin -u用户名 -p旧密码 password 新密码
1、例1:给root加个密码fntp666。首先在DOS下进入目录mysqlbin(这个会把),然后键入以下命令:
mysqladmin -uroot -password fntp666
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。
2、例2:再将root的密码改为gd999。
mysqladmin -uroot -pab12 password gd999
鑫软MySQL命令 退出MySQL,
直接输入Exit然后回车即可退出mysq,不过别忘记分号奥!
鑫软MySQL命令 创建数据库,
语法格式:命令:create database 数据库名;
例如:建立一个名为scx666的数据库
create database scx666;
鑫软MySQL命令 显示所有数据库,
语法格式:命令:show databases;(注意:最后有个s)
示例:show databases;
鑫软MySQL命令 删除数据库,
语法格式:命令:drop database <数据库名>
举例子:删除名为 scx666的数据库
输入: drop database scx666;
鑫软MySQL命令 连接数据库,
语法格式:命令:use <数据库名>;
例如:如果scx数据库存在,尝试存取它:
mysql> use scx;
屏幕提示:Database changed
鑫软MySQL命令 查看当前数据库,
语法格式:查看当前使用的数据库
mysql> select database();
鑫软MySQL命令 查看当前所有数据表,
直接输入:以下命令
mysql> show tables; (注意:最后有个s)
鑫软MySQL命令 建立数据表,
语法结构:命令:create table <表名> ( <字段名> <类型> [,…<字段名n> <类型n>]);
mysql> create table MyClass(
id int(4) not null primary key auto_increment,
name char(20) not null,
sex int(4) not null default ’′,
degree double(16,2));
鑫软MySQL命令 获取表结构,
语法格式:命令:desc 表名,或者show columns from 表名
mysql>DESCRIBE MyClass
mysql> desc MyClass;
mysql> show columns from MyClass;
鑫软MySQL命令 删除表,
语法结构:命令:drop table <表名>
例如:删除表名为 MyClass 的表
mysql> drop table MyClass;
鑫软MySQL命令 向表中插数据,
命令:insert into <表名> [( <字段名>[,…<字段名n > ])] values ( 值 )[, ( 值n )]
例如,往表 MyClass中插入二条记录, 这二条记录表示:编号为的名为Tom的成
绩为.45, 编号为 的名为Joan 的成绩为.99,编号为 的名为Wang 的成绩为.5.
mysql> insert into MyClass values(1,’Tom’,96.45),(2,’Joan’,82.99), (2,’Wang’, 96.59);
鑫软MySQL命令 查询表中数据,
语法格式:1)、查询所有行
命令:select 字段,字段,…,字段 from 表名 where (表达式)
例如:查看表 sc 中所有数据
mysql> select * from sc;
2)、查询前几行数据
例如:查看表 MyClass 中前行数据
mysql> select 姓名,学号 from sc order by 学号 limit 0,2;
或者:
mysql> select … from sc limit 0,2;
鑫软MySQL命令 删除表中数据,
命令:delete from 表名 where 表达式
例如:删除表 MyClass中编号为1的所有字段的记录
mysql> delete from MyClass where id=1;
鑫软MySQL命令 修改表中数据,
语法格式:修改表中数据:update 表名 set 字段=新值,…where 条件
mysql> update MyClass set name=’Mary’where id=1;
鑫软MySQL命令 在表中增加字段,
语法格式:命令:alter table 表名 add字段 类型 其他;
例如:在表MyClass中添加了一个字段passtest,类型为int(4),默认值为空
mysql> alter table MyClass add passtest int(4) default ‘’;
鑫软MySQL命令 更改表名,
语法格式:命令:rename table 原表名 to 新表名;
例如:在表MyClass名字更改为YouClass
mysql> rename table MyClass to YouClass;
更新字段内容
update 表名 set 字段名 = 新内容
update 表名 set 字段名 = replace(字段名,’旧内容’,’新内容’)
鑫软MySQL命令 修改数据库,
语法结构:在mysql的sc表中增加字段id,类型是int(11)并且非空:
alter table sc add column id int(11) not null primary key auto_increment;
这样,就在表sc中添加了一个字段id,类型为int(11)。
鑫软MySQL命令 数据库的授权,
语法格式:mysql>grant select,insert,delete,create,drop
on . (或test./user./…)
to 用户名@localhost
identified by ‘密码’;
如:新建一个用户帐号以便可以访问数据库,需要进行如下操作:
mysql> grant usage
-> ON test.
-> TO testuser@localhost;
Query OK, 0 rows affected (0.15 sec)
此后就创建了一个新用户叫:testuser,这个用户只能从localhost连接到数据库并可以连接到test 数据库。下一步,我们必须指定testuser这个用户可以执行哪些操作:
mysql> GRANT select, insert, delete,update
-> ON test.
-> TO testuser@localhost;
Query OK, 0 rows affected (0.00 sec)
此操作使testuser能够在每一个test数据库中的表执行SELECT,INSERT和DELETE以及UPDATE查询操作。现在我们结束操作并退出MySQL客户程序:
mysql> exit
Bye9!
鑫软MySQL命令 为查询结果重命名,
语法格式:-- select 字段 as 名字… from 表名;
select name as ‘姓名’,age from students;
其实还可以通过 as 给表起别名
– select 别名.字段 … from 表名 as 别名;
select * from students as s;
实际例子:如下:
select s.name from students as s;
鑫软MySQL命令 消除重复行,
– 消除重复行(查性别)
– distinct 字段 不要记有个印象
例子:select distinct gender from students;
鑫软MySQL命令 条件查询,
条件查询:
– 比较运算符
– select … from 表名 where …
– >
– 查询年纪大于18岁的信息
例子:select * from students where age > 18;
– <
– 查询年纪小于18岁的信息
例子:select * from students where age < 18;
– 查询小于等于18岁的信息
例子:select * from students where age <= 18;
– 查询年龄为18岁的所有学生的名字
例子:select * from students where age = 18;
扩展===============================
关于:不等于的表达方式:!= 或者 <>
– 查询年龄不为18岁的所有学生的名字
例子1:select * from students where age != 18;
例子2:select * from students where age <> 18;
关于:逻辑运算:and or not
逻辑运算符
– and
– 18和28之间的所有学生信息
例子:select * from students where age > 18 and age < 28;
– 18岁以上的女性
例子:select * from students where age > 18 and gender = ‘女’;
-关于or的使用18以上或者身高高过180(包含)以上
select * from students where age > 18 or height >= 180;
关于not的使用
不在 18岁以上的女性 这个范围内的信息
例子:select * from students where not (age>18 and gender=2);
例子:select * from students where not age > 18 and gender= “女”;
例子:select * from students where not (age > 18 and gender = “女”);
鑫软MySQL命令 模糊查询,
关于like % 的使用:
模糊查询(where name like 要查询的数据)
– like
– 通配符:%(英文的百分号) 替换任意个
– 通配符:(下划线) 替换1个
– 查询姓名中 以 “小” 开头的名字
示例:select * from students where name like ‘小%’;
– 查询姓名中 有 “小” 所有的名字
例子:select * from students where name like ‘%小%’;
– 查询有2个字的名字
例子:select * from students where name like ‘’;
– 查询至少有2个字的名字
select * from students where name like '%’;
select * from students where name not like “__”;
(这里注意一下,阿鑫也没有试过这个查询方法,理论上会查出来一个名字的人。但是话又说回来了,谁的名字是一个字的。。。)
鑫软MySQL命令 范围查询,
in (1, 3, 8)表示在一个非连续的范围内
– 查询 年龄为18或34的姓名
实际例子:select * from students where age = 18 or age = 34 ;
实际例子:select * from students where age in (18,34);
– not in 不非连续的范围之内
– 年龄不是 18或34岁的信息
实际例子:select * from students where age not in(18,34);
– between … and …表示在一个连续的范围内
– 查询 年龄在18到34之间的的信息
实际例子:select * from students where age > 18 and age < 34;
– between xxx and xxx
实际例子:select * from students where age between 18 and 34;
–between…and…这是包含两端的数据
– not between … and …表示不在一个连续的范围内
– 查询 年龄不在18到34之间的的信息
实际例子:select * from students where age not between 18 and 34;
鑫软MySQL命令 判断数据为空,
…空判断
– 判空is null
– 查询身高为空的信息
实际例子:select * from students where height is null;
判断非空:-- 判非空is not null
实际例子select * from students where height is not null;
鑫软MySQL命令 排序查询,
– 排序
– order by 字段
– asc
– asc从小到大排列,即升序
– desc
– desc从大到小排序,即降序
– 查询年龄在18到34岁之间的男性,按照年龄从小到大到排序
实际例子:select * from students where (age between 18 and 34) and gender=‘男’ order by age asc;
–
— 查询年龄在18到34岁之间的女性,身高从高到矮排序
–
select * from students where (age between 18 and 34) and gender =‘女’ order by height desc;
–
— 查询年龄在18到34岁之间的女性,身高从高到矮排序, 如果身高相同的情况下按照年龄从小到大排序
–
select * from students where (age between 18 and 34) and gender = ‘女’ order by height desc,age asc;
— 如果年龄也相同那么按照id从大到小排序
select * from students where (age between 18 and 34) and gender =‘女’ order by height desc,age asc,id desc;
排序有优先级,第一个主排序,后面是次排序,在保证主排序不变的情况下,能排就排,不排就算了
鑫软MySQL命令 聚合函数(计算查询),
– 总数
– count
– 查询男性有多少人 count(字段) 要注意如果值有null那么不会进行计算
select count() from students where gender=‘男’;
– 最大值
– max
– 查询最大的年龄
select max(age) from students;
– 查询女性的最高 身高
select max(height) from students where gender =‘女’;
— 最小值
– min
例子:select min(age) from students ;
— 求和
– sum
– 计算所有人的年龄总和
例子:select sum(age) from students;
— 平均值
– avg
– 计算平均年龄
实际例子:select avg(age) from students;
– 计算平均年龄 sum(age)/count()
实际例子:select sum(age)/count(*) from students;
— 四舍五入 round(123.23 , 1) 保留1位小数
– 计算所有人的平均年龄,保留2位小数
select round (avg(age),2) from students;
— 计算男性的平均身高 保留2位小数
select round(avg(height),2) from students where gender=‘男’;
select avg(height) from students where gender = ‘男’;
鑫软MySQL命令 分组查询,
– 分组
– group by
– 按照性别分组,查询所有的性别
– select 分组字段 from 表名 group by 分组字段;
例子:select gender from students group by gender;
例子:select 分组字段 from 表名 group by 分组字段;
— 计算每种性别中的人数
实际例子:select gender,count(*) from students group by gender;
– group_concat(…)
– 查询同种性别中的姓名
======================================================================
语法格式:select gender,group_concat(name) from students group by gender;
======================================================================
=====
– select * from students where
– group by xxx having having用在分组条件
========================================
– having(注意having和group by 连用 having后通常也要跟 聚合函数)
– 查询平均年龄超过30岁的性别,以及姓名
select gender ,avg(age) from students group by gender having avg(age) > 30;
===========================================================================
– 查询每种性别中的人数多于2个的信息
select gender,count() from students group by gender having count() > 2;
---------------按性别分组,平均身高大160的女性组的名字
select gender,avg(height),group_concat(name) from students group by gender having avg(height) > 160 and gender=‘女’;
鑫软MySQL命令 分页查询(限制查询),
– limit 起始位置,个数, 这个一定要放在最后
– 分页
– limit start, count
– limit 放在最后面(注意)
起始位置 = (页数-1)*每页的个数
– 限制查询出来的数据个数
– 查询前5个数据
select * from students limit 0,5;
– 每页显示2个,第1个页面
select * from students limit 0,2;
– 每页显示2个,第2个页面
select * from students limit 2,2;
– 每页显示2个,第3个页面
select * from students limit 4,2;
– 每页显示2个,第4个页面
select * from students limit 6,2;
— 每页显示2个,显示第6页的信息, 按照年龄从小到大排序
select * from students order by age asc limit 6,2;
– 如果重新排序了,那么会显示第一页
鑫软MySQL命令 连接查询,
– inner join … on
– select … from 表A inner join 表B;
– 查询 有能够对应班级的学生以及班级信息
select * from students inner join classes on students.cls_id = classes.id;
– 按照要求显示姓名、班级
select students.name,classes.name from students inner join classes on students.cls_id = classes.id;
– 数据表起名字
select s.name,c.name from students as s inner join classes as c on s.cls_id = c.id;
— 查询 有能够对应班级的学生以及班级信息,显示学生的所有信息 students.,只显示班级名称 classes.name.
select students. ,classes.name from students inner join classes on students.cls_id = classes.id;
— 在以上的查询中,将班级名显示在第1列
select classes.name,students.* from students inner join classes on students.cls_id = classes.id;
– 查询 有能够对应班级的学生以及班级信息, 按照班级名进行排序
select classes.name,students.* from students inner join classes on students.cls_id = classes.id order by classes.name asc;
– 当时同一个班级的时候,按照学生的id进行从小到大排序
select classes.name,students.* from students inner join classes on students.cls_id = classes.id order by classes.name asc,students.id asc;
#如果是group by 条件使用having
#如果是inner join条件使用on
#其他都用where
===========================================================================================
===========================================================================================
#关于Join:
– left join
– 查询每位学生对应的班级信息
select * from students left join classes on students.cls_id = classes.id;
左边的表不管在右边的表中是否找到数据,都显示
– 查询没有对应班级信息的学生
select * from students left join classes on students.cls_id = classes.id where classes.name is null;
– right join on
– 将数据表名字互换位置,用left join完成
例子:select * from students right join classes on students.cls_id = classes.id;
================
例子:select * from classes right join students on students.cls_id = classes.id;
鑫软MySQL命令 子查询,
– 子查询
– 标量子查询: 子查询返回的结果是一个数据(一行一列)
– 列子查询: 返回的结果是一列(一列多行)
– 行子查询: 返回的结果是一行(一行多列)
– 查询出高于平均身高的信息(height)
实际例子:select avg(height) from students;
实际例子:select * from students where height > 172;
实际例子:select * from students where height > (select avg(height) from students);
– 查询学生的班级号能够对应的 学生名字(以下是实际例子)
select * from students where cls_id in (1,2);
select id from classes;
select * from students where cls_id in (select id from classes);
鑫软MySQL命令 用户操作,
增加用户:格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码”
增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。
首先用root用户连入MYSQL,然后键入以下命令:
grant select,insert,update,delete on . to [email=test1@”%]test1@”%[/email]” Identified by “abc”;
但增加的用户是十分危险的,你想如某个人知道test1的密码,
那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了
增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、
删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,
他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问。
代码:grant select,insert,update,delete on mydb.* to [email=test2@localhost]test2@localhost[/email] identified by “abc”;
不要密码的话:grant select,insert,update,delete on mydb.* to [email=test2@localhost]test2@localhost[/email] identified by “”
鑫软MySQL命令 增加表字段,
命令:alter table 表名 add字段 类型 其他;
例如:在表MyClass中添加了一个字段passtest,类型为int(4),默认值为0
mysql> alter table MyClass add passtest int(4) default ‘0’[/code]
鑫软MySQL命令 添加索引,
添加索引的实际例子: alter table 表名 add index 索引名 (字段名1[,字段名2 …]);
-例子: mysql> alter table employee add index emp_name (name);
-加主关键字的索引:mysql> alter table 表名 add primary key (字段名);
-例子: mysql> alter table employee add primary key(id);
-加唯一限制条件的索引:mysql> alter table 表名 add unique 索引名 (字段名);
-例子: mysql> alter table employee add unique emp_name2(cardnumber);
鑫软MySQL命令 删除索引,
alter table 表名 drop index 索引名;
例子: mysql>alter table employee drop index emp_name;
鑫软MySQL命令 创建表后修改表名,
命令:rename table 原表名 to 新表名;
例如:在表gd名字更改为scx
rename table gd to scx;
鑫软MySQL命令 备份数据,
命令在DOS的[url=file://\mysql\bin]\mysql\bin[/url]目录下执行
(1).导出整个数据库
导出文件默认是存在mysql\bin目录下
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u user_name -p123456 database_name > outfile_name.sql
(2).导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u user_name -p database_name table_name > outfile_name.sql
(3).导出一个数据库结构
mysqldump -u user_name -p -d –add-drop-table database_name > outfile_name.sql
-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table
(4).带语言参数导出
mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt database_name > outfile_name.sql
例如,将aaa库备份到文件back_aaa中:
代码如下:[root@test1 root]# cd /home/data/mysql
[root@test1 mysql]# mysqldump -u root -p --opt aaa > back_aaa
鑫软MySQL命令 连接查询,
等值与非等值连接查询
[例]查询每个学生及其的选修课程情况
select student.Sno as 学号,course.Cno as 选修课号,SC.Grade as 成绩
from student,course,SC
where student.Sno=SC.Sno and course.Cno=SC.Cno ;
自身连接
[例]查询每个学生的间接选修课
select SC.Sno as 学号,
FIRST.Cname as 直接选修课,
SECOND.Cname as 间接选修课
from SC,
course as FIRST,
course as SECOND
where FIRST.Cno=SC.Cno
and FIRST.Cpno=SECOND.Cno;
外连接
[例]查询所有学生选修课程情况(含没选修课程的学生)
select student.Sno as 学号,
Sname as 姓名,
sc.Cno as 选修课程号
from student
LEFT OUTER JOIN SC ON student.Sno=SC.Sno;
=================================================
join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据
===========================================================
JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行
=======================================================
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。
列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
鑫软MySQL命令 部分查询实际例子
复合查询实际例子:
查询选修了2门课程以上(含2门,但不含1号课程),学生学号和选修课程数。
select Sno as 学号 ,count(course.Cno) as 选修课程数
From SC,course
Where course.Cno=SC.Cno and course.Cno !=1
Group by Sno
Having Count(course.Cno)>=2;
===================================================
查询不及格门数2门以上的学生学号。
Select Sno
from sc
Where sc.Grade<60
Group by Sno
Having count(Cno)>=2;
===================================================
查询有2名以上(含2名)学生选修了的课程号和选修人数。
Select Cno,count(Sno)
From SC
Group by Cno
Having count(sno)>=2
鑫软MySQL命令 嵌套查询,
【例】查询与王敏同学在同一个系的学生信息select *
from student
where Sdept in (
select Sdept
from student
where Sname=‘王敏’
);
------------------------------------------【例】查询不与王敏同学不在同一个系的学生信息。
select *
from student
where Sdept not in (
select Sdept
from student
whereSname=‘王敏’
);
-------------------------------------------查询选修了课程名是“信息系统”的学生学号和姓名。
select student.Sno as 学号, Sname as 姓名
from student,SC
where student.Sno=SC.Sno and Cno in (
select Cno
from course
where Cname=‘信息系统’
)
------------------------------------------------查询曾与刘晨一同上课的学生学号和姓名。(假设:一个课程只有一个上课班)
select distinct student.Sno as 学号, Sname as 姓名
from student,SC
where student.Sno=SC.Sno and Cno in (
select Cno
from SC,student
where SC.Sno=student.Sno and student.Sno in (
select Sno
from student
where student.Sname=‘刘晨’
)
)
--------------------------------------------------查询每个学生超过他选修课程平均成绩的课程号。
select Cno
from SC a
where Grade> (
select avg(Grade)
from SC b
where a.Sno=b.Sno
)
--------------------------------------------------ANY表示任何一个,ALL表示所有,可以用在子查询的括号前面
【例】查询其他系中比计算机系某一学生年龄小的学生姓名,性别、年龄和所在系。
select Sname as 姓名,Ssex as 性别, Sage as 年龄, Sdept as 所在系
from student
where Sage <(
select Sage
from student
where Sdept=‘CS’
);
--------------------------------------------------【例】查询其他系中比计算机系所有年龄都小的学生姓名和年龄。
select Sname as 姓名, Sage as 年龄
from student
where Sdept<>‘CS’ and Sage <ALL (
select Sage
from student
where Sdept=‘CS’
);
----------------------------------------------------【例】查询所有选修了1号课程的学生姓名。
select Sname as 姓名
from student
where Exists (
select *
from SC
where Cno=1 and Sno=Student.Sno
);
鑫软MySQL命令 集合查询语句,
-----------------------------------并UNION
【例】 查询计算机系的学生及年龄不大于19岁的学生详细信息。
select *
from student
where student.Sdept=‘CS’
union
select *
from student
where student.Sage<=19;
------------------------------------------------------交INTERSECT
【例】查询选修了1号课程的与年龄不大于19岁的 学生 详细信息 的交集。
Select *
from student,SC
where student.Sno=SC.Sno and SC.Cno=1
INTERSECT
Select *
from student
where student.Sage<=19;
----------------------------------------------------------差EXCEPT
【例】查询计算机科学系的学生与年龄不大于19岁的学生详细信息的差集。
select *
from student
where student.Sdept=‘SC’
EXCEPT
select *
from student
where student.Sage<=19;
鑫软MySQL命令 数据完整性,
-----------------------------------------------------------------关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键----------------------------------------------------------------------------------
-学生表(学号,姓名,性别,班级)
其中每个学生的学号是唯一的,学号就是一个主键 ------------------------------
–修改表结构时候添加主键约束–
---------------------------------------------------------------------------------------------------------------成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键 ,同理 成绩表中的课程号是课程表的外键
主键
-唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性,主键只能有一个
==================================================================================
==================================================================================
-外键
-表的外键是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的,一个表可以有多个外键,外键是相对于主键说的,是建立表之间 的联系的必须的前提。
-================================================================================索引
-该字段没有重复值,但可以有一个空值,是提高查询排序的速度,一个表可以有多个惟一索引-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
创建主键的两种方式:(1)行内创建
create TABLE customers(
id int primary key, --设置id是直接将其设置为主键
name varchar(100),
address varchar(255),
);
-----------------------------------------------------------------------------------行外设置(2)行外设置:
create TABLE customers(
id int primary key,
name varchar(100),
address varchar(255),
);
alter table customers add primary key(id)
–在行外以添加字段的形式设置主键
2.域完整性
-域完整性指数据库表的列必须符合某种特定的数据类型或约束,比如说数据类型,长度,非空约束,唯一约束等等
-3.参照完整性
-参照完整性指的就是多表之间的设计,主要使用外键约束。
常用的多表设计有:一对多,多对多,一对一
-顾客与订单的关系就是一对多,一个顾客可以有多个订单,一个订单只对应一个顾客
-Eg:创建顾客信息表:
-create table customers(
id int,
name varchar(100),
address varchar(255),
PRIMARY KEY(id)
);
-创建订单信息表:
create table orders(
order_num int primary key,
price float(8,2),
status int,
customer_id int,
constraint customer_id_fk foreign key(customer_id) REFERENCES customers(id) --外键约束
// 在外键约束中 constraint代表约束,foreign key代表外键,references值目标表中的参照
//
);
------------------------========================-----------------------------------
----------------那么创建外键的作用是什么---------------------
可以使得两张表关联,保证数据的一致性和实现一些级联操作。
那么保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值!可以使得两张表关联,保证数据的一致性和实现一些级联操作。
鑫软MySQL命令 外键约束,
-----------------------------------添加外键约束:
#添加方式一:
-代码如下:----------
CREATE TABLE score1(
score DOUBLE,
sid INT,
CONSTRAINT fk_stu_score1_sid FOREIGN KEY(sid) REFERENCES stu(sid)
);
– 添加外键约束:
#方式二(若表已存在,可用这种):
CREATE TABLE score1(
score DOUBLE,
sid INT
);
ALTER TABLE score1 ADD CONSTRAINT fk_sid FOREIGN KEY(sid) REFERENCES stu(sid)
鑫软MySQL手册(fntp二次开源)
软件截图:
代码截图:
软件截图:
只要遵循软件读取文本的格式,就可以自定义你的MySQL内容啦!
开源项目地址:(no github直接蓝奏云):点击此处立刻下载易语言源码
最后奉上一个GIf关于软件的安装与使用,
下载鑫软MySQL笔记手册直链:
点击此处下载鑫软MySQL笔记手册安装包