澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

数据表数据库的基本操作

1. mysql是大器晚成种常用的数据库管理软件,优点有:无需付费,开源,跨平台,本文只是介绍一下MySQL的大致操作

sql 规范:

序言

2.数据库的中坚构造

<1> 在数据库系统中,SQL语句不区分抑扬顿挫写(提出用小写) 。但字符串常量区分轻重缓急写。提议命令大写,表名库名小写;

那类小说,记录自个儿看《MySQL5.6从零初始学》那本书的长河,将和睦感到根本的东西记录一下,并有极大概率协助到你们,在写的博文前几篇度会十分基本功,只要出手敲,跟着本身写的例子全体兑现叁次,基本上就解决了,中期很难了解的事物基本未有,所以写博文的内容,正是以练题的花样来展现的。

  能够把数据库精通成三个文书夹,数据库中的数据寄放的单位是表,可以预知为excel表格,表格的表头称为字段,表中的每一条数据称为记录

<2> SQL语句可单行或多石籀文写,以“;”结尾。关键词无法跨多行或简写。

亟待用的素材以链接的款型给急需的同校。

  图片 1

<3> 用空格和缩进来增加语句的可读性。子句常常位于独立行,便于编辑,升高可读性。

我用的mysql版本为: Mysql-5.5.45-win64.msi 密码是:26zw

3.MySQL安装

<4> 注释:单行注释:--

图形化工具 Navicat(中期不引入用,直接手动敲): Navicat 密码:c7fs

  1.从官方网址下载 

      多行注释:/*......*/

始发自己的MySQL之旅吧   始于二〇一五.12.04

  2.下载msi格式的文件,双击安装即可

<5>sql语句能够折行操作,用逗号分隔;

                                              --WH

  3.布置情状变量

数据库操作:

少年老成、数据库的设置

  windows遭受设置比linux简单的多,所以安装进程就不赘述

-- 创制数据库

以此就不在此过多演说了,因为英特网实乃太多安装mysql的学科了,有了本人给的mysql,在遵循那个设置教程(MySQL安装教程)去看,就能够设置完好。

  4.设置好以往,展开命令提示行,输入mysql -uroot -pkey,(key为设置进度中装置的 密码卡塔尔,然后回车现身  mysql > ,就象征安装成功了

CREATE DATABASE db_name [CHARACTER SET utf8];

设置好mysql后,如果急需选择windows命令窗口(也便是cmd)来操作mysql,那么就须求配备情况变量,在装置好的mysql下找到bin,将其目录放随景况变量path中去,就能够了,检查评定成功与否的方式是在cmd命令窗口中输入mysql,就能冒出第一次全国代表大会段意大利语,就证实成功了,反之失利,假如不会的话就去百度搜教程。

4.sql语句标准

--查看数据库

二、数据库的基本操作

  sql是结构化查询语言的缩写。大家通过sql语句来操作数据库,下边是sql语句的有个别挥毫标准

SHOW DATABASES;查看全数数据库

1、开启mysql服务命令

  1.sql语句不区分抑扬顿挫写,可是建议sql命令大写,自定义的库名表名之类小写

SHOW CREATE DATABASE db_name;查看数据库的创建新闻

net start mysql

  2.sql语句协助分行,以分部结尾,关键词无法跨行

--修正数据库

图片 2

  3.用空格和缩进来加强语句可读性

ALTER DATABASE db_name [CHARACTER SET xxx];

2、进入mysql的两种办法

  4.单行注释:--

--删除数据库

通晓步入:mysql -uroot -proot  格式:mysql -u帐号 -p密码

   多行注释:/*....*/

DROP DATABASE db_name;

密文步入:mysql -uroot -p 按enter会提醒您输入密码(Enter pssword:),此时您写的密码就能够来得为***这样。

  5.中括号里的开始和结果表示 牛溲马勃

--使用数据库

图片 3

5.数据水库蓄水体量易操作

USE db_name;

3、查看mysql中具有的数据库(日常在一定的单词命令就能是用小写,那么些要习于旧贯,看多了敲多了就认识了)

  1.成立数据库  CREATE DATABASE database_name;

数据表操作:

前方多个数据库是mysql中自带的,也正是必得的.

   能够在开立数据库的时候钦命编码集  CREATE DATABASE database_name CHARACTER SET utf8;

--创建表

SHOW DATABASES;

  2.剔除数据库  DROP DATABASE database_name; 从删库到跑路

CREATE TABLE table_name(字段1 类型 [封锁规范],

图片 4

  3.查看已开立的数据库  SHOW DATABASES;

字段2 类型 [自律原则],

4、创制名字为test_1的数据库

  4.翻看数据库创设新闻   SHOW CREATE DATABASE database_name;

字段3 类型 [自律原则])[CHARACTER SET xxx];

格式:CREATE DATABASE 数据库名

  5.改变数据库字符集  ALTECRUISER DATABASE database_name CHARACTER SET utf8;

        (字段纵然索引:可设置自增,auto_increment;

CREATE DATABASE test_1;

  6.运用数据库  USE database_name;    步入数据库后不曾脱离名令,可是能够三番五遍用SHOW查看数据库并用USE切换来任何数据库

  对于自增可以设置步长和起始值
       show session variables like 'auto_inc%';
       set session auto_increment_increment=2;
       set session auto_increment_offset=10;

图片 5

6.表的简约操作

         字段也得以安装暗中认可值:defalut 值)

5、删除名称为test_1的数据库

  使用数据库后进行的操作

数据类型:

格式:DROP DATABASE 数据库名

  1.创建表  CREATE TABLE table_name(字段名称 字段数据类型  [约束],

  • int 整数
  • varchar(n) n 表示字符串长度;
  • char(n) n表示固定的字符串长度;
  • tinyint ,小卡尺头,数据类型用于保存一些范围的整数数值范围,MySQL中无布尔值,使用tinyint(1)构造。
  • decima(m[d])l,正确小数,m是数字总个数(负号不算卡塔 尔(英语:State of Qatar),d是小数点后个数。 m最大值为65,d最大值为30。
  • float[(m.,d)], 单精度浮点数(非准确小数值卡塔尔国,m是数字总个数,d是小数点后个数。
  • DOUBLE[(M,D)] ,精度浮点数(非准确小数值卡塔尔国,m是数字总个数,d是小数点后个数。
  • text数据类型用于保存变长的大字符串,能够组多到65535 (2**16 − 1)个字符。
  • set集结类型
  • DATE:YYYY-MM-DD(1000-01-01/9999-12-31)

DROP DATABASE test_1;

                        字段名称 字段数据类型  [约束],    

自律原则:

图片 6

                      字段名称 字段数据类型  [约束]

  • 非空:not null
  • 唯一:unique
  • 主键:primary key

小结:学习了对数据库的三个操作,1、查看全体数据库 2、制造数据库 3、删除数据库

                      );

-- 查看表结构音信

三、数据表的基本操作

  2.查看全数表  SHOW TABLES;

DESC table_name;查看表结构

数据表和数据库还应该有Mysql三者的关联

   查看表的详细音信  DESC table_name;

SHOW TABLES; 查看当前数据库里的全数表

mysql中保存了不菲数据库、贰个数据库中得以保留超多表。

   查看表的创建音讯  SHOW CREATE TABLE table_name;

SHOW CREATE TABLE table_name;查看当前数据表结构

对数据表的增(创造表)删(删除表)改(改正表字段)查(查询表结构)。 注意:这里的操作对象是表,对表的操作也正是表的构造,和表中的字段的操作(字段和笔录要分明白)

  3.增加列  ALTER TABLE table_name ADD 列名 类型 [完整性节制原则] [first|after 字段名];

--校订表结构

前提:表是在数据库下的,所以要先确实使用哪个数据库。

    增扩张列用逗号隔开分离

----扩张字段

USE test_1;

  4.修改 

ALTER TABLE table_name ADD 字段 类型 [封锁规范] [first/after 字段名];#[first/after 字段名调节加多字段的岗位

图片 7

   改良一列类型   ALTECRUISER TABLE table_name MODIFY 列名 类型  [完整性节制原则];

---修改字段

1、创造数据表

   改进列名    ALTE昂Cora TABLE table_数据表数据库的基本操作。name CHANGE 列名 新名 类型 [封锁标准];

ALTER TABLE table_name MODIFY 字段 类型 [封锁标准];

格式:CREATE TABLE 数据表名(

   改正表名  RENAEM TABLE 表名 TO 新名;

---改进字段名

   字段名1  数据类型[列等第约束标准],

   纠正表的字符集  ALTE奥德赛 TABLE table_name CHARACTER SET utf8;

ALTER TABLE tabler-name CHANGE 字段 新字段 类型;

   字段名2  数据类型[列等级限定规范],

  5.删除 

---删除一列

   字段名3  数据类型[列等第约束标准]

   删除一列  ALTE库罗德 TABLE table_name DROP 列名;

ALTER TABLE table_name DROP 字段;

               ); 

   删除表   DROP TABLE table_name;

---修正表名                

留意:格式不自然必要如此隔着写,完全能够整个写成意气风发行。不过这样写可观性相当糟糕。笔者这么写只是为着能够看的更显明。

   删除主键的自增加  ALTE酷路泽 TABLE table_name CHANGE id id int(10)

ALTER TABLLE table_name TO new_table_name;

解释:

7.封锁原则

--删除表;

1、[]中括号中的内容表示能够有能够未有,

  创造表的时候,字段前面要加节制条件。常用的羁绊标准有:

DROP TABLE table_name;

2、列等级那个“列”一定要搞精晓说的是何等,一张表中有行有列,列表示竖,行表示横 

  1.非空  not null

--表记录的增加和删除改查

3、约束标准前边会讲到

  2.唯一性 unique

---增添音讯

  1.1、创造未有约束的student表

  3.主键  primary key  假使一个字段设置了非空属性和唯大器晚成性约束,那么自动识别为主键

INSERT [INTO]  table_name (字段1,字段2,。。。) VALUES (值1,。。。),(值2.。。。);

     CREATE TABLE student(
          id  INT(11),
          name  VARCHAR(12),
          age  INT(11)
               );

  4.自增  auto_increment  唯有主键能够安装这几个节制

INSERT [INTO] table_name set 字段1=值,字段2=值。。。。;

图片 8

   

---修正新闻

讲授:SHOW TABLES 查询数据库底下的全部表。

8.sql数据类型

UPDATE table_name set 字段=值 WHERE 子句;

1.2、成立有约束的student表

数值类型:  

---删除表记录

   六大封锁:主键限制、外键节制、非空约束、唯黄金时代约束、默许约束、自动扩张

 

DELETE FROM table_name [where 子句];

1.2.1:主键限制

类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 字节 (-128,127) (0,255) 小整数值
SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8 字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
FLOAT 4 字节 (-3.402 823 466 E 38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E 38) 0,(1.175 494 351 E-38,3.402 823 466 E 38) 单精度
浮点数值
DOUBLE 8 字节 (1.797 693 134 862 315 7 E 308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E 308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E 308) 双精度
浮点数值
DECIMAL 对DECIMAL(M,D) ,如果M>D,为M 2否则为D 2 依赖于M和D的值 依赖于M和D的值 小数值

---查语句

PLX570IMA宝马X3Y KEY(primary key):天下第一(唯大器晚成)和不能够为空(非空),通俗的讲,正是在表中扩张记录时,在该字段下的多寡无法重新,不能够为空,比方以地点创制的表为例子,在表中扩展两条记下,假使id字段用了主键限制。则id无法平等,并且无法为空。经常每张表高度有壹个字段为主键,唯黄金时代标志那条记下。今后须要找到该条记录也得以同这么些主键来确认记录,因为主键是唯生机勃勃的,何况非空,一张表中各种记录的主键度不相近,所以依据主键也就会找到相应的笔录。并非多条重复的记录。若无主键,那么表中就能够设有很多种新的记录,那么即浪费存款和储蓄空间,在询问时也消耗越多能源。

 

SELECT *|字段1|字段2|。。。FROM table_name 

诚如被主键约束了的字段度习贯性的称该字段为该表的主键

时间项目:

             WHERE 条件

单字段主键限定

 

             GROUP BY  字段

  三种艺术都得以

类型 大小
(字节)
范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 8 1970-01-01 00:00:00/2037 年某时 YYYYMMDD HHMMSS 混合日期和时间值,时间戳

             HAVING 条件

  CREATE TABLE student(            CREATE TABLE student(

  

             ORDER BY 字段

    id  INT(11) PRIMARY KEY,          id  INT(11),

字符串类型:

             LIMIT 节制条数

    name  VARCHAR(12),            name  VARCHAR(12),

类型 大小 用途
CHAR 0-255字节 定长字符串
VARCHAR 0-65535 字节 变长字符串
TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串
TINYTEXT 0-255字节 短文本字符串
BLOB 0-65 535字节 二进制形式的长文本数据
TEXT 0-65 535字节 长文本数据
MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
LOGNGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295字节 极大文本数据

group function:

    age  INT(11)   age  INT(11),

9.表记录操作

--<1> 统计表中所有记录

            -- COUNT(列名):统计行的个数
                    -- 统计一个班级共有多少学生?先查出所有的学生,再用count包上
                     select count(*) from ExamResult;
                    -- 统计JS成绩大于70的学生有多少个?
                     select count(JS) from ExamResult where JS>70;
                    -- 统计总分大于280的人数有多少?
                     select count(name) from ExamResult
                           where (ifnull(JS,0) ifnull(Django,0) ifnull(OpenStack,0))>280;
                    -- 注意:count(*)统计所有行;     count(字段)不统计null值.

            -- SUM(列名):统计满足条件的行的内容和
                    -- 统计一个班级JS总成绩?先查出所有的JS成绩,再用sum包上
                        select JS as JS总成绩 from ExamResult;
                        select sum(JS) as JS总成绩 from ExamResult;
                    -- 统计一个班级各科分别的总成绩
                        select sum(JS) as JS总成绩,
                               sum(Django) as Django总成绩,
                               sum(OpenStack) as OpenStack from ExamResult;

                    -- 统计一个班级各科的成绩总和
                        select sum(ifnull(JS,0) ifnull(Django,0) ifnull(Database,0))
                                                    as 总成绩 from ExamResult;
                    -- 统计一个班级JS成绩平均分
                        select sum(JS)/count(*) from ExamResult ;
                    -- 注意:sum仅对数值起作用,否则会报错。

            -- AVG(列名):
                            -- 求一个班级JS平均分?先查出所有的JS分,然后用avg包上。
                                select avg(ifnull(JS,0)) from ExamResult;
                            -- 求一个班级总分平均分
                                select avg((ifnull(JS,0) ifnull(Django,0) ifnull(Database,0)))
                                                         from ExamResult ;
            -- Max、Min
                            -- 求班级最高分和最低分(数值范围在统计中特别有用)
                              select Max((ifnull(JS,0) ifnull(Django,0) ifnull(OpenStack,0)))
                              最高分 from ExamResult;
                              select Min((ifnull(JS,0) ifnull(Django,0) ifnull(OpenStack,0)))
                              最低分 from ExamResult;
                            -- 求购物表中单价最高的商品名称及价格
                              ---SELECT id, MAX(price) FROM order_menu;--id和最高价商品是一个商品吗?

                              SELECT MAX(price) FROM order_menu; 

                            -- 注意:null 和所有的数计算都是null,所以需要用ifnull将null转换为0!
                            --      -----ifnull(JS,0)

  ); PRIMARY KEY(id) );

  1.插入数据 insert

 正则表明式:

多字段主键节制(复合主键)

  INSERT [INTO] table_name (字段名称,,,) VALUES(值,,,),

SELECT * FROM employee WHERE emp_name REGEXP '^yu';

    这几个id和name都市主键,表明在之后扩大的插入的笔录中,id和name不能並且同样,举个例子说能够是这么。一条记下为id=1,name=yyy、另一条记下为:id=1,name=zzz。 那样是足以的。实际不是你们所驾驭的四个字段分别度无法雷同。

                           (值,,,),

外键约束:

  CREATE TABLE student(CREATE TABLE student(

                            .......  

ALTER TABLE student ADD CONSTRAINT abc

    id  INT(11) PRIMARY KEY,            id  INT(11),

                           (值,,,);

                     FOREIGN KEY(charger_id)

    name  VARCHAR(12) PRIMARY KEY,       name  VARCHAR(12),

  2.改善表记录

       REFERENCES classcharger(id);

    age  INT(11)     age  INT(11),

数据表数据库的基本操作。    UPDATE table_name SET 字段=值,字段=值....WHERE子句;

**ALTER TABLE student DROP FOREIGN KEY abc;**

  );        PRIMARY KEY(id,name) );

  3.删除表记录

多表查询:

1.2.2:外键约束

    DELETE FROM table_name WHERE子句; 不加where子句的话会把全体表删除

内链接:

怎么是外键例如就理解了,有两张表,一张表是emp(职员和工人)表,另一张表是dept(部门)表,二个职工归于二个机构,那么如何通过工作者能让大家和睦他在哪个部门吧?那就只幸好工作者表中追加叁个字段,能表示工作者所在的机构,那该字段就必须要是积攒dept中的主键了(因为主键是独一的,技能确实是哪位单位,进而代表职员和工人所在的机关,假诺是机关名称,有些机构的称号只怕是同名。就不可能分别了。),像这样的字段,就切合外键的性情,就足以采用外键限定,使该字段只可以够存款和储蓄另一张表的主键。假诺不被外键约束,那么该字段就不或者作保仓库储存进来的值就自然是另一张表的主键值。

    TRUNCATE TABLE table_name;  删除全部表

 select * from employee,department where employee.dept_id = department.dept_id;
--select * from employee inner join department on employee.dept_id = department.dept_id;

外键约束的特征:

    delete和truncate的区别:

外链接:

  1、外键限定能够描述任性四个字段(蕴涵主键),可感觉空,并且三个表中能够有多个外键。不过外键字段中的值必须是另一张表中的主键。

      1.语法差异

--(1)左外连接:在内连接的基础上增加左边有右边没有的结果

 select * from employee left join department on employee.dept_id = department.dept_id;

 --(2)右外连接:在内连接的基础上增加右边有左边没有的结果

 select * from employee RIGHT JOIN department on employee.dept_id = department.dept_id;

  2、那样被外键关联的三种表的涉及能够称呼老爹和儿子表或然主从表。子表(从表)具备外键字段的表,父表(主表)被外键字段所针没错表。

      2.delete后头能够加约束标准,选择删除某条记下,而truncate只好删掉整个表

图片 9图片 10

  3、子表被外键约束修饰的字段必得和父表的主键字段的项目相同。

      3.delete 足以回去删除的数量,可是truncate不能够

4、查询平均成绩大于八十分的同学的姓名和平均成绩

    SELECT sname,AVG(num) FROM student INNER JOIN score 
                  ON student.sid=score.student_id
                  GROUP BY student_id HAVING AVG(num)>80

5、查询所有学生的学号,姓名,选课数,总成绩
   SELECT  sname,student.sid,COUNT(student.sid),SUM(num) FROM student 
         INNER  JOIN score ON student.sid=score.student_id
         GROUP BY student_id

6、查询姓李老师的个数
   SELECT COUNT(tid) FROM teacher WHERE tname LIKE "李%"

7、查询没有报李平老师课的学生姓名

   SELECT sname FROM student WHERE sid not in 
   (SELECT DISTINCT student_id FROM score WHERE course_id  in 
   (SELECT cid FROM teacher INNER JOIN course ON teacher.tid=course.teacher_id 
                       WHERE tname LIKE "李平%"))


8、查询物理课程比生物课程高的学生的学号
    SELECT A.student_id,A.num,b.num FROM            

    (SELECT * FROM score WHERE course_id=(SELECT cid FROM course WHERE cname="物理"))as A

    INNER JOIN

    (SELECT * FROM score WHERE course_id=(SELECT cid FROM course WHERE cname="生物"))as B

    ON
    A.student_id=B.student_id

    WHERE A.num>B.num

9、查询没有同时选修物理课程和体育课程的学生姓名

     SELECT sname FROM student WHERE sid NOT in (SELECT student_id FROM  score 
     WHERE course_id in (SELECT cid FROM course WHERE cname="物理" OR cname="体育")

     GROUP BY student_id HAVING COUNT(sid)=2)

10、查询挂科超过两门(包括两门)的学生姓名和班级

    SELECT sname,caption FROM student LEFT JOIN class ON student.class_id=class.cid 
             where sid in (SELECT student_id FROM score WHERE num<60 
             GROUP BY student_id HAVING COUNT(sid)>1
            )

11 、查询选修了所有课程的学生的姓名
    SELECT sname FROM student WHERE sid in (SELECT student_id FROM score

    GROUP BY student_id HAVING COUNT(sid)!=(SELECT COUNT(cid) FROM course))

12、查询李平老师教的课程的所有成绩记录


    SELECT * FROM score WHERE course_id in (SELECT cid FROM course LEFT JOIN teacher ON teacher.tid=course.teacher_id
             WHERE tname="李平老师")

  注意:二个表中有被外键修饰的字段,就称该表有外键(是“有外键”。并非“是外键”),并会给该表中的外键约束取三个称呼,所以大家常说的这几个表有未有外键,指的不是被外键节制修饰的字段名,而是指这一个表是还是不是有存在外键限定。也等于说,不能够说这么些表的外键是xxx(该表中被外键约束修饰的字段名),这种说法是似是而非的,可是大部分人生机勃勃度习感觉常了那样,固然影响非常的小,然而在好多时候需求知道一个东西时,会促成一定的麻烦。

      4.在剔除全部表的时候,delete的原理是一条一条的删除,而truncate 的规律是把全部表删掉,再新建三个如出大器晚成辙字段的表

练习

格式:CONSTRAINT  外键名称  FOREIGN KEY(被外键限制的字段名称)  REFERENCES  主表名(主键字段)

       所以,假诺表中有自拉长的字段,delete删除之后,新的表是从上个地方上马自增的,不过truncate是从1最早

 

    爱尔兰语解释:CONSTRAINT:约束    REFERENCES:参照他事他说加以考察

10.表笔录查询  select

 

    CREATE TABLE tableA
        (
            id INT(11),
            name VARCHAR(22),
            location VARCHAR(50),
            PRIMARY KEY(id)
        );
        CREATE TABLE tableB
        (
            id INT(11),
            name VARCHAR(22) NOT NULL,
            deptId INT(11),
            PRIMARY KEY(id),
            CONSTRAINT tableA_tableB_1 FOREIGH KEY(deptId) REFERENCES tableA(id)
       );            

本条是最珍视,也是最常用的

 

     解释:tableB中有二个名称叫tableA_tableB_1的外键关联了tableA和tableB多个表,被外键限制修饰的字段为tableB中的deptId,主键字段为tableA中的id     

  1.单表查询

1.2.3:非空节制

SELECT [DISTINCT] *|field1,field,... from table_name where .... group by .... order by...[desc|asc]

NOT NULL. 被该约束修饰了的字段,就不可能为空,主键约束中就包含了那几个限制

     1.展现表的总体新闻  SELECT * FROM table_name; 

    CREATE TABLE tableA
        (
            id INT(11),
            name VARCHAR(22) NOT NULL,
            location VARCHAR(50),
            PRIMARY KEY(id)
        );

        显示钦定列的音信  SELECT 列,列.. FROM table_name;

1.2.4:唯少年老成约束

        SELECT 后边能够跟 表明式 、distinct(表示去重卡塔尔国

UNIQUE  被唯后生可畏约束修饰了的字段,表示该字段中的值唯风度翩翩,不能够有雷同的值,通俗点讲,就好比插入两条记下,这两条记下中处于该字段的值不可能是相似的。

     2.用WHERE子句进行过滤

         CREATE TABLE tableA
        (
            id INT(11),
            name VARCHAR(22) UNIQUE,
            location VARCHAR(50),
            PRIMARY KEY(id)
        );

       WHERE子句中可以应用:

也正是说在插入的笔录中,每条记下的name值无法是相似的。

        1.相比较运算符  > < >= <= !=

1.2.5:私下认可限制

        2.between .. and ..   在..和.. 之间

Default  钦定这一列的暗中认可值为多少,比如,男人同学超多,性别就足以设置为暗许男,借使插入风华正茂行记录时,性别没有填,那么就暗中同意加上男 

        3.in (a,b,c)         在a,b,c 那八个值中一个

     
        CREATE TABLE table
        (
            id INT(11) PRIMARY KEY,
            name VARCHAR(22) NOT NULL,
            deptId INT(11) DEFAULT 1111,
            salary FLOAT
        );

        4.like  条件  eg: like "李%"  表示已“李”开头

1.2.6:自动扩展  

                  like "李_"    表示以“李”起头,並且后边有一个字符,二个下划线代表三个字符

 AUTO_INCREMENT 贰个表只好三个字段使用AUTO_INCREMENT,並且利用这几个约束的字段只可以是整数类型(大肆的卡尺头类型     TINYINT,SMALLIN,INT,BIGINT),暗中同意值是1,也正是说从1开头扩张的。平日正是给主键使用的,自动扩大,使各样主键的值度不相仿,并且永不大家本身管理,让主键本身自动生成

        5.逻辑运算符 and or not

  CREATE TABLE table
  (
    id INT(11) PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(22) NOT NULL
  );

     3.order by  意味以。。排序,排序的列能够是列名,也能够是安装的小名

2、查询表结构  

        order语句前面能够跟四个形式,asc表示升序(暗中同意卡塔尔国,desc表示降序

              2.1、查看表基本构造语句

     4.group by 意味以..分组,分组后只会展现每一个字段的首先条记下,分组后的筛选拔的机要字是having ,成效和 where形似,与where比较,having前面能够利用聚合函数

                    格式1:DESC昂CoraIBE 表名/DESC 表名  那多少个的功力是平等的,简写了单词describe

     5.聚合函数:

                      DESCRIBE student; 

        1.avg() 求平均值

 图片 11

        2.count() 总结个数

 2.2、查看创制表的语句 

        3.sum() 求和函数

   格式:SHOW CREATE TABLE 表名

        4.max(),min()  最大值最小值函数

   SHOW CREATE TABLE student;

     6.limit 关键字用来决定展现的条数,limit 1 象征只突显第黄金年代行,limit 2,5 代表彰显第2到5行

图片 12

     7.采取正则表明式

如此彰显的格式很不好,看不清楚,所以有了上边这一个讲话

        

格式:SHOW CREATE TABLE 表名G

        

SHOW CREATE TABLE studentG;

  2.多表查询

图片 13

    1.外键

 3、改善数据表      

      要是两张表要创建联系,就须求选用到外键,须要构思二种关系:后生可畏对生机勃勃,多对多,和风流浪漫对多

改良数据表包蕴:对表中字段的充实、删除、修改。 在这里个里面用的显要字为 ALTE奥迪Q7

      1.豆蔻年华对多: 这种模型中,有主表和子表的分别,比如三个教师职员和工人有三个学生,叁个学员必须要有一个民办教授,这种情形老师就是主表,学生便是子表,大家须求在子表中创建关联字段(外键卡塔 尔(英语:State of Qatar)

  3.1、修正表名

        扩张外键:[ADD CONSTRAINT name] FOREIGN KEY (字段名)REFERENCES table_name;

    格式:ALTER TABLE<旧表名> RENAME[TO]<新表名>;

        删除却键:ALTEEscort TABLE table_name DROP FOREIGN KEY name;

    将student表名改为student1(改完后在改回来)

              (那些name是增加外键时给外键起的名字,若无设置,从表的开创方式中可以找到卡塔 尔(英语:State of Qatar)

    ALTER TABLE student RENAME TO student1;

      2.多对多:要求依附第三张表,在第三张表中开创五个外键

图片 14

      3.生龙活虎对风流罗曼蒂克:这种实际正是外键加叁个unique,非常少用

3.2、改善表中的字段名

      4. 假如两张表建设构造了涉嫌,就不能够随意从表中删除记录了,必需破除关系后才具删

  格式:ALTECRUISER TABLE<表名> CHANGE<旧字段名><新字段名><新数据类型>

    2.内连接

  将student表中的name字段名改为 username

      大家在查询表记录的时候,能够何况出示多张表的笔录,相仿

  ALTER TABLE student CHANGE name username VARCHAR(30);

      select * from tableA,tableB 

图片 15

      可是那样并不是大家想要的结果,当然大家能够在查询结果后边用where子句实行筛选,但更常用的是用内接连:

3.3、校订表中的数据类型

      select * from tableA inner join tableB on tableA.id = tableB.id

  格式:ALTE本田CR-V TABLE<表名> MODIFY<字段名><数据类型>                     

    3.外连接

  ALTER TABLE student MODIFY username VARCHAR(20);

      1.左外接连:在内连接的底子上加码侧边有左边未有的结果

图片 16

          select * from tableA left join tableB on tableA.id = tableB.id

分解:只好修正字段名的数据类型,可是其原理跟下边change做的事情同样,这里也会有涂改字段名的进度,只可是改革后的字段名和修正前的字段名相通,不过数据类型不均等。

      2.右外接连:在内连接的底工上平添左边有左侧未有的结果

3.4、改正字段的排列地方

       select * from tableA right join tableB on tableA.id = tableB.id

   方式1:ALTERubicon TABLE<表名> MODIFY<字段1><数据类型> FIMuranoST|AFTE奥迪Q5<字段2>

  

   解释:将字段1的岗位放置第大器晚成,可能放到钦定字段2的末尾

多表查询演练(代码通过navicat书写卡塔 尔(阿拉伯语:قطر‎:

   ALTER TABLE student MODIFY username VARCHAR(20) AFTER age;

图片 17图片 18

图片 19

  1 -- 1.查询平均成绩大于八十分的同学的姓名和平均成绩
  2 -- SELECT sname,avg(num) from student INNER JOIN  score
  3 --                                 on student.sid = score.student_id
  4 --                                 GROUP BY student_id
  5 --                                 HAVING avg(num) >80
  6 
  7 -- 2、查询所有学生的学号,姓名,选课数,总成绩
  8 
  9 -- SELECT student.sid,sname,count(course_id),sum(num) from student
 10 --                     INNER JOIN score
 11 --                     on score.student_id = student.sid
 12 --                     GROUP BY student_id
 13 -- 3、查询没有报李平老师课的学生姓名
 14 
 15 -- SELECT sname from student WHERE sid not in (SELECT DISTINCT student_id from score WHERE course_id  in (SELECT cid from teacher
 16 --                                                                                     INNER JOIN course
 17 --                                                                                     on teacher.tid = course.teacher_id
 18 --                                                                                     WHERE tname like '李平%'))
 19 
 20 -- 4、查询物理课程比生物课程高的学生的学号
 21 -- SELECT * from
 22 --
 23 -- (SELECT * from    score WHERE course_id = (SELECT cid from course WHERE cname="物理")) as A
 24 --
 25 -- INNER JOIN
 26 --
 27 -- (SELECT * from    score WHERE course_id = (SELECT cid from course WHERE cname="生物")) as B
 28 --
 29 -- on A.student_id = B.student_id
 30 --
 31 -- WHERE A.num > B.num
 32 --
 33 -- 5、查询没有同时选修物理课程和体育课程的学生姓名
 34 
 35 -- SELECT sname from student where sid not in(SELECT student_id from score
 36 --                 WHERE course_id
 37 --                 in (select cid from course
 38 --                         WHERE cname
 39 --                         like "物理" or cname = "体育")
 40 --                 GROUP BY student_id having count(sid)=2)
 41 --
 42 
 43 -- 6、查询挂科超过两门(包括两门)的学生姓名和班级
 44 
 45 -- SELECT sname,caption from student
 46 --                                         INNER JOIN class
 47 --                                         on student.sid = class.cid
 48 --                                         where sid in
 49 --                                         (SELECT student_id from score
 50 --                                                     where num    <60 GROUP BY student_id
 51 --                                                             HAVING count(num) >=2)
 52 
 53 -- 7、查询选修了所有课程的学生姓名
 54 -- SELECT sname from student
 55 --                             WHERE sid in (SELECT student_id  from score
 56 --                                                                                             GROUP BY student_id
 57 --                                                                                                 HAVING count(course_id) = (SELECT count(cid) from course)
 58 -- )
 59 
 60 
 61 
 62 
 63 -- 8、查询不同课程但成绩相同的学号,课程号,成绩
 64 
 65 SELECT student_id,course_id,num from score WHERE student_id = (SELECT A.student_id from
 66 
 67 (SELECT *,COUNT(DISTINCT num) as C FROM score GROUP BY student_id)as A
 68 
 69 LEFT JOIN
 70 
 71 (SELECT *,count(num) as D FROM score GROUP BY student_id) as B
 72 
 73 on A.sid = B.sid
 74 
 75 where C!=D)
 76 
 77 -- 9、查询没学过“李平”老师课程的学生姓名以及选修的课程名称;
 78 
 79 SELECT a.sname,course.cname from course
 80                     RIGHT JOIN (SELECT * from student
 81                                 WHERE sid not in
 82                                             (select student_id
 83                                                     from score where course_id =3) )as A
 84                     on course.cid = A.class_id
 85 
 86 
 87 
 88 
 89 -- 10、查询所有选修了学号为1的同学选修过的一门或者多门课程的同学学号和姓名;
 90 
 91 --
 92 SELECT sid,sname
 93         from student
 94         WHERE sid in (SELECT DISTINCT student_id from score 
 95                                                                 WHERE course_id
 96                                                                 in (SELECT course_id
 97                                                                                 from score where student_id = 1))
 98 
 99 
100 
101 
102 -- 11、任课最多的老师中学生单科成绩最高的学生姓名
103 
104 SELECT sname from student
105         where sid in (SELECT DISTINCT student_id from score
106                                             WHERE course_id in (SELECT cid from course
107                                                     where teacher_id=(SELECT teacher_id from course
108                                                             GROUP BY teacher_id order by count(cid) desc limit 1))
109                                                                         and num=(SELECT max(num) from score WHERE course_id in
110                                                                                 (SELECT cid from course where teacher_id=(SELECT teacher_id
111                                                                                             from course GROUP BY teacher_id order by count(cid) desc limit 1)) ))-- SELECT * from score  GROUP BY course_id having

方式2:ALTE大切诺基 TABLE<表名> CHANGE<字段1><字段2><数据类型> FI奥迪Q5ST|AFTEEvoque<字段3> 

练习题

解说:其实是均等的,将是字段2覆盖字段1,然后在开展排序

 

ALTER TABLE student CHANGE username username VARCHAR(20) AFTER age;

图片 20

总结

CHANGE和MODIFY的区别?

规律都市同样的,MODIFY只好改过数据类型,可是CHANGE能够订正数据类型和字段名,也便是说MODIFY是CHANGE的更具体化的三个操作。只怕以为用CHANGE只退换三个数据类型不太爽,就大增了一个能直接改数据类型的运用主要字MODIFY来操作。

3.5、增添字段

格式:ALTEEvoque TABLE<表名称> ADD<新字段名><数据类型>[封锁标准][FI大切诺基ST|AFTE兰德RAV4<已存在的表名>]

释疑:在叁个一定岗位扩充八个新的字段,要是不点名地方,暗中同意是最终一个。

ALTER TABLE student ADD sex VARCHAR(11);

图片 21

3.6、删除字段

格式:ALTER TABLE<表名称> DROP<字段名>;

ALTER TABLE student DROP sex;

图片 22

3.7、删除表的外键节制

格式:ALTECR-V TABLE<表名称> DROP FOREIGN KEY<外键约束名>

只顾:外键限制名 指的不是被外键限制修饰的字段名,切记,而是大家在开立外键节制关系时取的名字。

3.8、改正表的蕴藏引擎

格式:ALTELX570 TABLE<表名> ENGINE=<改良后的囤积引擎名>

本条蕴藏引擎近年来自个儿要好也不太了解,即便掌握有哪三种引擎,但是多少尖锐一些就不晓得了,所以希图留到日后在说。

4、删除表

4.1、删除毫无干系联表

格式:DROP TABLE<表名>;

ALTER TABLE student;

图片 23

4.2、删除被其余表关联的主表

那一个是相当重大的一点,在有外键关联关系的两张表中,即使除去主表,那么是删不掉的,况兼会报错。因为有张表信赖于他。那咋办呢?针对这种情景,总共有三种办法

1、先删除你子表,然后在剔除父表,那样就高达了去除父表的目标,可是子表也要被删去
2、先去掉外键关系,然后在剔除父表,那样也能到达指标,并且保留了子表,只删除我们无需的父表。在3.7中就解说了何等删除却键关系。

四、总结

讲了如此多,但实在中,用到的并不是众多,极其是对表结构的更改的操作,在骨子里支付中,平时数量库表被定义下来了,就不会在更换了,开采数目库表设计的不好,也是将表全体删减,然后在重复创造过新表。不过在大家学习的长河中,那个操作依旧很首要的,因为必要那几个幼功来上学后边更深刻的东西,不大概因为其实中不用,就不学这不学那,要相信,不管做什么,那一定是有意义的作业,或许那意思并非常小,可是随后早晚会对大家具有扶持。 

您大概感兴趣的篇章:

  • MySQL入门(四) 数据表的多少插入、更新、删除
  • MySQL入门(三) 数据库表的查询操作【首要】
  • MySQL入门(二) 数据库数据类型详细明白
  • MySQL入门(五) MySQL中的索引详讲

本文由澳门新浦京娱乐场网站发布于数据库,转载请注明出处:数据表数据库的基本操作