6.MySQL简介

MySQL简介
·点击查看MySQL官方网站
·MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,后来被Sun公司收购,Sun公司后来又被Oracle公司收购,目前属于facle旗下产品

特点

·使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性

·支持多种操作系统,如Linux、Widdows、AlX、FreeBSD、HP-UX、MacOS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris等
·为多种编程语言提供了API,如C、C++、Python、Java、Perl、PHP、Eiffel、Ruby等
·支持多线程,充分利用CPU资源
·优化的SQL查询算法,有效地提高查询速度
·提供多语言支持,常见的编码如GB2312、BIG5、UTF8
·提供TCP/IP、ODBC和JDBC等多种数据库连接途径
·提供用于管理、检查、优化数据库操作的管理工具
·大型的数据库。可以处理拥有上千万条记录的大型数据库
·支持多种存储引擎
·MySQL软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库
·MySQL使用标准的SQL数据语言形式
·Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统
·在线DDL更改功能
·复制全局事务标识
·复制无崩渍从机
·复制多线程从机

数据类型与约束
·为了更加准确的存储数据,保证数据的正确有效,需要合理的使用数据类型和约束来限制数据的存储。
常用数据类型
·整数:int,有符号范围(-21474836482147483647),无符号范围(0429496725)
·小数:decimal,如decimal(5.2)表示共存5位数,小数占2位,整数占3位
·字符串:varchar,范围(065533),如varchar(3)表示最多存3个字符,一个中文或一个字母都占一个字符
·日期时间:datetime,范围(1000-01-01 00:00:00
9999-12-3123:59:59),如12020-01-01 12:29:59'
约束
·主键(primary key):物理上存储的顺序
·非空(not nul):此字段不允许填写空值
·惟一(unique):此字段的值不允许重复
·默认值(default):当不填写此值时会使用默认值,如果填写时以填写为准
·外键foreign key):维护两个表之间的关联关系

数据库的基本操作

创建数据库的语法格式:

create databases 数据库名称 ;

例:创建一个名称为xiaoxu的数据库,SQL语句如下:

create databases xiaoxu ;

查看数据库的语法格式:

show databases ;

查看某个已创建好的数据库的语法格式:

show create databases 数据库名称 ;

修改数据库编码的语法格式:

lter database 数据库名称 default character set 编码方式 collate 编码方式_bin ;

例:将数据库xiaoxu 的编码修改为 gbk,SQL语句如下所示:

alter database xiaoxu default character set gbk collate gbk_bin ;

删除数据库的语法格式:

drop database 数据库名称 ;

数据表的基本操作

创建数据表语法格式:

1create table 表名 2 3{ 4 5 字段名 1,数据类型[完整性约束条件], 6 7 字段名 2,数据类型[完整性约束条件], 8 9 ... 10 11 字段名 n,数据类型[完整性约束条件], 12 13}

例:创建学生表,字段要求如下
姓名(长度为10),年龄

1create table student( 2 id int unsigned primary key auto_increment, 3name varchar(10), 4age int unsigned, 5height decimal(5,2) 6)

查看数据表的语法格式:

1show create table 表名 ; 2 3或者 4 5describe 表名 ; 6 7简写为 8 9desc 表名 ;

删除表

1drop table 表名; 2 3或者 4 5drop table if exists 表名;

例:删除学生表

1drop table students 2 34 5drop table if exists students

添加数据

添加一行数据
格式一:所有字段设置值,值的顺序与表中字段的顺序对应

·说明:主键列是自动增长,插入时需要占位,通常使用0或者default 或者nul来占位,插入成功后以实

insert into 表名 values(...)

例:插入一个学生,设置所有字段的信息

insert into students values(e,'亚瑟”,22,177.56)

格式二:部分字段设置值,值的顺序与给出的字段顺序对应

insert into 表名(字段1,..) values(值1.…)

例:插入一个学生,只设置姓名

insert into students(name) values(“老夫子")

添加多行数据
方式一:写多条insert语句,语句之间用英文分号隔开

1insert into students(name) values(“老夫子2); 2insert into students(name) values('老夫子3’); 3insert into students values (0,‘亚瑟2",23,167.56)

方式二:写一条insert语句,设置多条数据,数据之间用英文逗号隔开

1格式一:insert into 表名 values(..)(...... 2例:插入多个学生,设置所有字段的信息 3insert into students values(0,'亚瑟3',23,167.56),(0,‘亚瑟423167.56) 4 5格式二:insert into 表名(列1..)values(1..),(值1...... 6例:插入多个学生,只设置姓名 7insert into students(name) values('老夫子5),('老夫子6

修改

格式:update 表名 set 列1=值1,列2=值2 … where条件

例:修改id为5的学生数据,姓名改为狄仁杰,年龄改为20

update students set name='数仁杰’,age=20 where id=5

删除

格式:delete from 表名 where 条件

例:删除id为6的学生数据

delete from students where id=6

逻辑删除

11、设计表,给表添加一个字段isdelete,1代表删除,0代表没有删除 22、把所有的数据isdelete都改为0 33、要删除某一条数据时,更新他的isdelete为1 44、当要查询数据时,只查询isdelete为0的数据 5update students3 set isdelete=0 6update students3 set isdelete=1 where id=1 7select * from students3 where isdelete=0

查询数据

创建数据表

1drop table if exists students; 2create table students( 3studentNo varchar(10) primary key, 4name varchar(18)5sex varchar(1)6hometown varchar(20)7age tinyint(4)8class varchar(10)9card varchar(28), 10)

准备数据

1insert into students values 2(‘001’,‘王昭君’,‘女’,‘北京’,‘20’,‘1班‘,‘340322199001247654’), 3(‘002',‘诸葛亮’,‘男’,‘上海’,‘18’,‘2班’,'340322199002242354‘), 4(‘003',‘张飞‘,‘男’,‘南京’,‘24’,'3班’,‘340322199003247654’), 5(‘084’,‘白起’,‘男’,‘安徽’,‘22’,14班’,‘348322199005247654’), 6(‘005’,‘大乔’,‘女’,‘天津”,‘19’,‘3班’,‘340322199004247654’), 7(‘086’,‘孙尚香,‘女’,‘河北’,‘18’,‘1班’,‘340322199006247654’), 8(‘007’,‘百里玄策”,‘男’,‘山西’,‘20’,‘2’班”,‘340322199007247654’), 9 10查询所有字段 11 12select *from 表名 13select * from students 14 15查询指定字段 16在select后面的列名部分,可以使用as为列起别名,这个别名出现在结果集中 17select列1,2..from表名 18 19--表名.字段名 20select students,name,students.age from students 21--可以遥过as给表起别名 22select s.name,s.age from students as s 23--如果是单表查询可以省略表名 24select name,age from students 25-使用as给字段起别名 26select studentNo as 学号,name as 名字,sex as 性别 from students

条件
·使用where子句对表中的数据筛选,符号条件的数据会出现在结果集中
·语法如下

1select 字段1,字段2...from 表名 where 条件; 2 3例: 4 5select *from students Where id=1;

·where后面支持多种运算符,进行条件的处理
。比较运算
。逻辑运算
。模糊查询
。范围查询
。空判断

比较运算符
·等于:=
·大于:>
·大于等于:>=
·小于:<
·小于等于:<=
·不等于:!=或<>

11:查询小乔的年龄 2select age from students where name='小乔' 32:查询20岁以下的学生 4select * from students where age<20 53:查询家乡不在北京的学生 6select * from students where hometown!='北京'

逻辑运算符
·or
·not

·and

11:查询年龄小于20的女同学 2select * from students where age<20 and sex=‘女' 32:查询女学生或1班”的学生 4select * from students where sex='女”or class='1班’ 53:查询非天津的学生 6select * from students where not hometown=‘天津

模糊查询
·like
·%表示任意多个任意字符
·表示一个任意字符

11:查询姓孙的学生 2select *from students where name like ‘孙%' 3 42:查询姓孙且名字是一个字的学生 5select * from students where name like‘孙_' 6 73:查询叫乔的学生 8select *from students where name like '%乔!'

范围查询
·in表示在一个非连续的范围内

11:查询家乡是北京或上海或广东的学生 2select * from students where hometown in('北京”,‘上海’,‘广东”)

·between...and....表示在一个连续的范围内

12:查询年龄为1820的学生 2 3select * from students where age between 18 and 20

空判断
·注意null与“是不同的
·判空is null
例1:查询没有填写身份证的学生

select * from students where card is null

·判非空is not null

例2:查询填写了身份证的学生

select* from students where card is not null

排序
·为了方便查看数据,可以对数据进行排序
·语法:

1select *from 表名 2order by 列1 asc l desc,2 asc l desc..

·将行数据按照列1进行排序,如果某些行列1的值相同时,则按照列2排序,以此类推
·默认按照列值从小到大排列
·asc从小到大排列,即升序
·desc从大到小排序,即降序

例1:查询所有学生信息,按年龄从小到大排序

select *from students order by age

例2:查询所有学生信息,按年龄从大到小排序,年龄相同时,再按学号从小到大排序

select *from students order by age desc,studentNo

聚合函数
·为了快速得到统计数据,经常会用到如下5个聚合函数
·count(*)表示计算总行数,括号中写星与列名,结果是相同的
·聚合函数不能在where中使用

例1:查询学生总数

select count(*)from students;

  ·max()表示求此列的最大值

例2:查询女生的最大年龄

select max(age) from students where sex='女';

·min(列)表示求此列的最小值

例3:查询1班的最小年龄

select min(age) from students;

分组
·按照字段分组,表示此字段相同的数据会被放到一个组中
·分组后,分组的依据列会显示在结果集中,其他列不会显示在结果集中
·可以对分组后的数据进行统计,做聚合运算
·语法:

select 列1,列2,聚合.…from表名 group by 列1,列2...

例1:查询各种性别的人数

select sex,count(*) from students group by sex

例2:查询各种年龄的人数

select age,count(*) from students group by age

分组后的数据筛选
·语法:

1select 列1,列2,聚合..from表名 2group by 列1,列2,列3... 3having1.…聚合...

·having后面的条件运算符与where的相同

例1:查询男生总人数

1方案一 2select count(*from students where sex='男’ 3 4方案二: 5select sex,count(*from students group by sex having sex='男'

获取部分行
·当数据量过大时,在一页中查看数据是一件非常麻烦的事情
·语法

1select *from 表名 2limit start,count

·从start开始,获取count条数据
·start索引从0开始
例1:查询前3行学生信息

select *from students limit 0,3

要求每页显示3条
select count(*)from students
12/3获取总页数
第一页
select* from students limit 0,3     3*(1-1)
第二页
select * from students limit 3,3    3*(2-1)
第三页
select * from students limit 6,3    3*(3-1)
第四页
select * from students limit 9,3    3*(4-1)

连接查询
·当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回
·等值连接查询:查询的结果为两个表匹配到的数据

·左连接查询:查询的结果为两个表匹配到的数据加左表特有的数据,对于右表中不存在的数据使用null
填充

·右连接查询:查询的结果为两个表匹配到的数据加右表特有的数据,对于左表中不存在的数据使用null
填充

 

准备数据

1drop table if exists courses; 2create table courses( 3courseNo int(18) unsigned primary key auto_increment, 4name varchar(18) 5); 6 7insertinto courses values 8'1''数据库'), 9'2',‘qtp')10'3''linux'), 11'4’,‘系统测试'), 12'5,‘单元测试'), 13'6',‘测试过程'); 14 15drop table if exists scores; 16 17create table scores( 18id int(10) unsigned primary key auto_increment, 19courseNo int(10), 20studentno varchar(10)21score tinyint(4) 22); 23 24insert into scores values 25'1',‘1',‘001',‘90'), 26'2',‘1',‘002''75'), 27'3''2',‘002','98'), 28'4',‘3',‘001',‘86'), 29'5',‘3',‘003',‘80'), 30'6',‘4',‘004',‘79'), 31'7',‘5',‘005',‘96'), 32'8',‘6',‘006',‘80');

等值连接

1方式一 2select*from1,2 where表1.=2.

例1:查询学生信息及学生的成绩

1select * from students,scores where students.studentno=scores.studentno 2 3方式二(又称内连接)不会产生笛卡尔积,不会产生临时表,性能高 4select * from1 5inner join 表2 on 表1.=2.6 7select * from students 8inner join scores on students.studentno=scores.studentno

例2:查询课程信息及课程的成绩

1select * from courses,scores where courses.courseNo=gcores.courseNo 2select * from couses 3inner join acores on courses.courseNo=acores.courseNo

例3:查询学生信息及学生的课程对应的成绩

1select from students,courses,scores where students.studentNo=scores.studentNo and scores.courseNo=courses.courselNo 2 3select * from students 4inner join scores on students.studentNo=scores,studentNo 5inner join courses on scores.courseNo=courses.courseNo

左连接

1select * from1 2left join 表2 on表1.=2.3 41:查询所有学生的成绩,包括没有成绩的学生 5 6select from students stu 7left join scores sc on stu.studentNo=sc.studentNo

例1:查询所有学生的成绩,包括没有成绩的学生
左连接 : join前面的表称为左表 , join后面的表称为右表

1select * from students 2left join scores on students.studentNo=scores.studentNo

例2:查询所有学生的成绩,包括没有成绩的学生,需要显示课程名

1select *from students 2left join scores on students.studentNo-scores.studentNo 3left join courses on courses.courseNo=scores.courseNo

右连接

1insert into courses values 20,语文), 30,数学); 4 51:查询所有课程的成绩,包括没有成绩的课程select * from scores 6rioht join courses on scores.courseNo=courses.courseNo 7 82:查询所有课程的成绩,包括没有成绩的课程,包括学生信息 9select* trom scores 10right join courses on scorea.courseNo-courses.courseNo 11right join students on students.studentNo=scores.studentNo.

子查询
·在一个select 语句中,嵌入了另外一个select 语句,那么被嵌入的select 语句称之为子查询语句

主查询
·主要查询的对象,第一条select语句
主查询和子查询的关系
·子查询是嵌入到主查询中
·子查询是辅助主查询的,要么充当条件,要么充当数据源
·子查询是可以独立存在的语句,是一条完整的 select 语句
子查询分类
·标量子查询:子查询返回的结果是一个数据(一行一列)

1例一:查询大于平均年龄的学生 2select avg(age) from students 321.5833 4select * from students where age>21.5833 5 6select *from students where age>(select avg(age)from students) 7 82:查询王昭君的成绩,要求显示成绩 9select studentNo from students where name='王昭君' 10select score from scores where studentNo=(select studentNo from students where name='王昭君')

·列子查询:返回的结果是一列(一列多行)

13:查询18岁的学生的成绩,要求显示成绩 2 3select *trom atudenta where age=18 4 5select * from scores where studentNo in(1002','006') 6select * from scores where studentNo in (select studentno from students where age=18)

·行子查询:返回的结果是一行(一行多列)

14:查询男生中年龄最大的学生信息 2select * from students where sex='男‘ and age=(select max(age) from students) 3 4select * from students where (sex,age)=(‘男‘,30) 5 6select * from students where (sex,age)=(select sex,age from students where sex=‘男‘ order by age desc limit 1)

·表级子查询:返回的结果是多行多列

15:查询数据库和系统测试的课程成绩 2select from scores as s 3inner join (select * from courses where name in(‘数据库‘,‘系统测试’)) as c on s.courseNo=c.courseNo

子查询中特定关键字使用
·in 范围
。格式:主查询where条件in(列子查询)
·anyl some任意一个
。格式:主查询where列=any(列子查询)
。在条件查询的结果中匹配任意一个即可,等价于in
·all
。格式:主查询where列=all(列子查询):等于里面所有
。格式:主查询where列<>all(列子查询):不等一其中所有

数据库DOS命令

数据库

1·查看所有数据库 2 show databases; 3·使用数据库 4 use数据库名; 5·查看当前使用的数据库 6 select database(); 7·创建数据库 8 create database 数据库名 charset=ut棉; 9例: 10 create database ceshi charset=utf8; 11·删除数据库 12 drop database数据库名; 13例: 14 drop database ceshi;

数据表

1·查看当前数据库中所有表 2 show tables; 3·查看表结构 4 desc 表名; 5查看表的创建语句 6 show create table 表名; 7例: 8 show create table students;

备份

1首先要以管理员身份运行·运行mysqldump 命令 2 mysqldump -uroot -p 数据库名 > ceshi.sql 3#按提示输入mysqL的密码

恢复

1·先创建新的数据库 2 mysql -uroot -p新数据库名<ceshi.sql 3#根据提示输入my5q1密码

内置函数

字符串函数

1·拼接字符串 concat(str1,str2..) 2 select concat(12,34,'ab')3 4·包含字符个数 length(str) 5 select length('abc'); 6 7·截取字符串 8 。left(str,len)返回字符串str的左端len个字符 9 。right(str,len)返回字符串str的右端len个字符 10 。substring(str,pos,len)返回字符串str的位置pos起len个字符 11 select substring('abc123',2,3)12 13·去除空格 14 。trim(str)返回删除了左空格的字符串str 15 。rtrim(str)返回删除了右空格的字符串str 16 select ltrim('bar ')17 18·大小写转换,函数如下 19 。lower(str) 20 。upper(str) 21 select lower('aBcD')

数学函数

1·求四舍五入值round(n.d),n表示原数,d表示小数位置,默认为0 2 select round(1.6); 3 4·求x的y次幂pow(x.y) 5 select pow(2,3)6 7·获取圆周率Pl() 8 select PI()9 10·随机数rand(),值为0-1.0的浮点数 11 select rand(); 12 13 14随机0-10的整数 15 select round(rand()*18) 16 17随机从一个表中取一条记录 18 select * from goods order by rand() limit 1

日期时间函数

1·当前日期current_date0 2 select current_date()3 4·当前时间current_time0 5 select current_time()6 7·当前日期时间now0 8 select now()9 10·日期格式化date_fomat(date,format) 11·参数format可选值如下 12 13%Y获取年,返回完整年份 14%y获取年,返回简写年份 15%册获取月,返回月份 16%d获取日,返回天值 17H获取时,返回24进制的小时数 18%h获取时,返回12进制的小时数 19i获取分,返回分钟数 20%s获取秒,返回秒数 21 22·例:将使用-拼接的日期转换为使用空格拼接 23 select date_format('2016-12-21','%Y %m %d");

流程控制

1·case语法:等值判断 2·说明:当值等于某个比较值的时候,对应的结果会被返回;如果所有的比较值都不相等则返回else的结果;如果没有else并且所有比较值都不相等则返回null 3case 值 when 比较值1 then结果1 when 比较值2 then 结果2...else 结果end 4例: 5select case 1 when 1 then ‘one' when 2 then ‘two' else 'zero' end as result;

自定义函数

1创建 2 ·语法如下 3 delimiter $$ 4 create function函数名称(参数列表)returns 返回类型 5 begin 6 sql语句 7 end 8 $$ 9 delimiter; 10 ·说明:delimiter用于设置分割符,默认为分号 11 ·在“sql语句”部分编写的语句需要以分号结尾,此时回车会直接执行,所以要创建存储过程前需要指定其它符号作为分割符,此处使用∥,也可以使用其它字符 12  示例 13 ·要求:创建函数my_trim,用于删除字符串左右两侧的空格 14 ·step1:设置分割符 15 delimiter $$ 16 17 ·step2:创建函数 18 create function my_trim(str varchar(100)) returns varchar(100) 19 begin 20 return ltrim(rtrim(str))21 end * 22 $$ 23 24 ·step3:还原分割符 25 delimiter; 26

创建

1·语法如下 2 delimiter// 3 create procedure 存储过程名称(参数列账) 4 begin 5 sql语句 6 end 7 // 8 delimiter; 9 10 ·说明:delimiter用于设置分割符,默认为分号 11 ·在“sql语句”部分编写的语句需要以分号结尾,此时回车会直接执行,所以要创建存储过程前需要指定其它符号作为分割符,此处使用∥,也可以使用其它字符

调用

1·语法如下 2 call存储过程(参数列表); 3 4 调用存储过程proc_stu 5 call proc_stu(); 6 7 ·存储过程和函数都是为了可重复的执行操作数据库的sql语句的集合。 8 ·存储过程和函数都是一次编译,就会被缓存起来,下次使用就直接命中缓存中已经编译好的sql,不需要重复编译 9 ·减少网络交互,减少网络访问流量

视图

1·对于复杂的查询,在多个地方被使用,如果需求发生了改变,需要更改sql语句,则需要在多个地方进行修改,维护起来非常麻烦 2·解决:定义视图 3·视图本质就是对查询的封装 4·定义视图,建议以v开头 5 6 create view 视图名称 as 7 select 语句; 8 9·例:创建视图,查询学生对应的成绩信息 10 11create view v_stu_score_course as 12select 13 stu.*,cs.courseNo,Cs.name courseName,sc.score 14from 15 students stu 16inner join scores sc on stu.studentNo = sc.studentNo 17inner join courses cs on cs.courseNo = sc.courselo 18 19 20·查看视图:查看表会将所有的视图也列出来 21 show tables; 22 23·删除视图 24 drop view 视图名称; 25 26例: 27 drop view v_stu_score_course; 28·使用:视图的用途就是查询 29 select * from v_stu_score_course;

事务

为什么要有事务?

·事务广泛的运用于订单系统、银行系统等多种场景
·例如:A用户和B用户是银行的储户,现在A要给B转账500元,那么需要做以下几件事:
1.检查A的账户余额>500元;
2.A账户中扣除500元;
3.B账户中增加500元;
**·**正常的流程走下来,A账户扣了500,B账户加了500,皆大欢喜。那如果A账户扣了钱之后,系统出故障了呢?A白白损失了500,而B也没有收到本该属于他的500。以上的案例中,隐藏着一个前提条件:A扣钱和B加钱,要么同时成功,要么同时失败。事务的需求就在于此
**·**所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两个操作要么都执行,要么都不执行。所以,应该把他们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性

1转账 2 大乔500 3 小乔200 4 5 begin; 6 update account set money=money-100 where name=‘大乔! 7 update account set money=money+100 where name=‘小乔! 8 。。。。。。。。。。。 9 。。。。。。。。。。。 10 若以上所有操作都成功 11 commit; 12 13 begin; 14 任何一步失败 15 rollback;

索引

1语法 2 3 ·查看索引 4 show index from表名; 5 6 ·创建索引 7 方式一:建表时创建索引 8 create table create_index( 9 id int primary key, 10 name varchar(10)unique, 11 age int, 12 key(age) 13 ); 14 15 方式二:对于已经存在的表,添加索引 16 如果指定字段是字符串,需要指定长度,建议长度与定义字段时的长度一致 17 字段类型如果不是字符串,可以不填写长度部分 18 19 create index索引名称 on表名(字段名称(长度)) 20 21 例: 22 create index age_index on create_index(age)23 create index name_index on create_index(name(10))24 25 ·删除索引: 26 drop index索引名称on表名;

示例

1查询 2 ·开启运行时间监测: 3 set profiling=14 5 ·查找第1万条数据test10000 6 select * from test_index where title='test10000'; 7 8 ·查看执行的时间: 9 show profiles; 10 11 ·为表itle_index的title列创建索引: 12 create index title_index on test_index(title(10))13 14 ·执行查询语句: 15 select* from test_index where title='test10000'; 16 17 ·再次查看执行的时间 18 show profiles; 19 20缺点 21 ·虽然索引大大提高了查询速度,同时却会降凭更新表的速度,如对表进行INSERTUPDATEDELETE,因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件 22 ·但是,在互联网应用中,查询的语句远远大于增别改的语句,甚至可以占到80%~90%,所以也不要太在意,只是在大数据导入时,可以先删除索引,再批量插入数据,最后再添加索引

外键foreign key

1·如果一个实体的某个字段指向另一个实体的主键,就称为外键。被指向的实体,称之为主实体(主表),也叫父实体(父表)。负责指向的实体,称之为从实体(从表),也叫子实体(子表) 2·对关系字段进行约束,当为从表中的关系字段填写值时,会到关联的主表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并报错 3 4语法 5 ·查看外键 6 show create table 表名 7 8 ·设置外键约束 9 方式一:创建数据表的时候设置外键约束 10 create table class( 11 id int unsigned primary key auto_increment, 12 name varchar(10) 13 create table stu( 14 name varchar(10), 15 class_id int unsigned, 16 foreign key(class_id)references class(id) 17 ); 18 foreign key(自己的字段)references 主表(主表字段) 19 20 方式二:对于已经存在的数据表设置外键约束 21 alter table 从表名 add foreign key(从表字段)references 主表名(主表字段); 22 alter table stu add foreign key(class_id)references class(id); 23 24 ·删除外键 25 需要先获取外键约束名称 26 show create table stu; 27 28 获取名称之后就可以根据名称来删除外键约束 29 alter table 表名 drop foreign key 外键名称; 30 alter table stu drop foreign key stu_ibfk_1; 31 32 在实际开发中,很少会使用到外键约束,会极大的降低表更新的效率

修改密码

1·使用root登录,修改mysql数据库的user表 2 。使用password0函数进行密码加密 3 。注意修改完成后需要刷新权限 4 5 use mysql; 6 update user set pas sword=password(’新密码”)where user='用 户名’; 7 8 例: 9 update user set password=password('123')where user='root'; 10 刷新权限:flush privileges;

忘记root账户密码怎么办?

11、配置mysql登录时不需要密码,修改配置文件 2 ·Centos中:配置文件位置为/etc/my.cnf 3 ·Windows中:配置文件位置为C:\\Program Files(×86)MySQL\\MySQL Server 5.1\\my.ini 4 修改,找到mysqld,在它的下一行,添加skip-grant-tables 5 6 [mysqld] 7 skip-grant-tables 8 92、重启mysql,免密码登录,修改mysql数据库的user表 10 11 use mysql; 12 update user set password=password('新密码”)where user=‘用户名’; 13 14 例: 15 update user set password=password('123') where user='root'; 16 刷新权限:flush privileges; 17 183、还原配置文件,把刚才添加的skip-grant-tables刷除,重启
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Python3:sqlalchemy对mysql数据库操作,非sql语句

Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''