NET学习笔记08MySQL基础知识,MySql学习笔记

mysql数据库基础知识

mysql笔记

数据库操作(DDL)

什么是数据库

数据库顾名思义,就是用来存储数据的工具,用一个比例形象的例子来比喻,就是Excel,一个Excel文件就可以看成是一个数据库。

一,补充

数据库的创建

CREATE {DATABASE|SCHEMA} [IF NOT EXISTS] db_name [[DEFAULT] CHARACTER SET [=] charset_name]

例如:

CREATE DATABASE IF NOT EXISTS  test_db DEFAULT CHARACTER SET utf8

关系型数据库

就是以行与列构成的二维数据表的形式,用来存储数据的,并且将多张数据表存储在一个单元中的存储形式,就称为关系型数据库。

cd
;dos窗口查看文件夹,盘与盘之间不需要cd

查看当前服务器下的数据库列表

SHOW { DATABASES | SCHEMAS }

数据表

由行与列构成的二维结构的存储数据的表格。

has
a;生命周期,拥有,自己的

查看数据库的定义

SHOW CREATE  { DATABASE | SCHEMA } db_name

记录

就是数据表中行,一横行数据我们就称为一条数据记录。

通常而言,每条数据记录都有一个ID号,我们可以把这个id理解成是excel中的行号,用来对每条记录进行区分与标记。

use
e;使用,传进来的

查看上一步操作的警告信息

SHOW WARNINGS

主键

很多时候我们将id称为主键,主键这是指这张表的排列顺序的依据。

and;和

删除数据库

DROP  { DATABASE | SCHEMA } [IF EXISTS] db_name

字段

数据字段,就是数据表中的列。

每一个字段都需要指定一个名称,用来说明该列数据的作用,就叫作字段名。

is e;是

打开数据库

USE db_name

常用的数据库的类型

Mysql 性能强悍,可以免费使用。

MSSQL server 微软公司的数据库软件,通常用于搭配微软体系的编程语言。

Access是office的办公套件之一。

Oracel 性能非强悍,也非常昂贵。

byte
;+127——-128;127+1取返=-128;

修改数据库的编码方式

ALTER { DATABASE | SCHEMA }  db_name [DEFAULT] CHARACTER SET [=] charset_name

安装与使用mysql

安装mysql的方式很多,我们使用phpstudy这个软件来安装php + mysql的运行环境。安装之后,我们就拥有了mysql的服务。而且还有两款mysql客户端。

 

Mysql分为客户端与服务端。服务端仅仅用于对软件程序提供数据通信,普通用户无法直接看到其中的数据内容。

 

客户端用来将服务端的数据,以用户可以理解的方式展示在其界面上。

 

ip

数据表操作

phpMyAdmin

phpMyAdmin是最常用的mysql客户端,它是基于php语言的。

在桌面右下角的phpstudy图标上右击弹出菜单中选择phpMyAdmin就可以启动进入了。启动之后,需要输入用户与密码进行登陆,默认的用户名密码都是root。

 

本机ip;127.0.0.1

MYSQL中的数据类型

新建数据库

1、 要指定数据库的名称。

2、 通常选择utf8_unicode_ci字符集,在只有中文的情况下,可以选择gbk_chinese_ic或gb2312_chinese_ci 。

 

mysql
–version;命令窗口查询mysql版本(管理员运行命令窗口)

整数类型

数据类型 存储范围 字节
TINYINT 有符号值-128~127;无符号值 0~255; 1
SMALLINT 有符号值-32768~32767;无符号值 0~65535; 2
MEDIUMINT 有符号值-8388608~8388607;无符号值 0~16777215; 3
INT 有符号值-2147483648~2147483647;无符号值 0~4294967295; 4
BIGINT 有符号值-9223372036854775808~9223372036854775807;无符号值 0~18446744073709551615L; 8
BOOL,BOOLEAN 等同于TINYINT(1),0为FALSE ,其余为TRUE 1

新建数据表

1、 选中数据库之后,点击右侧的“新建数据表”,填写“数据表名”。

2、 指定数据表的字段,也就是列。在指定字段的过程中我们要对字段添加字段名、数据类型、数据长度、是否是主键、是否自增。(多数情况下,主键是名为id的整数类型,而且是自增的。)

3、 为字段指定这一列的数据类型。

二,mysql基础

浮点类型

数据类型 存储范围 字节
FLOAT[(M,D)] 负数取值范围为-3.40E+38~-1.17E-38,0,1.175E-38~3.40E38;M是数字总位数,D是小数点后面的位数,若M,D被省略,根据硬件限制来保存值。 4
DOUBLE[(M,D)] -1.79E+308~2.22E-308,0,2.22E-308~1.79E308 8
DECIMAL[(M,D)] 和DOUBLE一样,内部以字符串形式存储数值 M+2

自增auto_increment

自增字段中通常存放的是整数类型的数据,用于表示数据库中的记录的序号。

自增字段的值不需要手动输入,其中的编号是自动产生的,每当向这表里面添加一条新记录的时候,自增字段会自动取出上一行字段值,然后加一,作为新记录的主键值。(主键绝对不会发生重复,即使上一条记录被删除了)。

1,数据库;

字符串类型

数据类型 存储需求
CHAR(M) M个字节,0<=M<=255
VARCHAR(M) L+1个字节,L<=M且0<=M<=65535
TINYTEXT L+1个字节,L<2^8
TEXT L+2个字节,L<2^16
MEDIUMTEXT L+3个字节,L<2^24
LONGTEXT L+4个字节,L<2^32
ENUM(‘Value1′,’Value2’,……) 1或2个字节,取决于枚举值的个数(最多65535个值)
SET(‘Value1′,’Value2’,……) 1,2,3,4或8个字节,取决于SET成员的数目(最多64个成员)

如何设置一个字段为自增

1、在创建表或在修改字段结构的时候,设置字段的数据类型为int,然后选中auto_increment上的勾。

2、当插入一条数据时,不要手动填写主键字段。

3、主键生成的数字绝对不会重复,即使记录被删除。

1,储存数据以及数据结构的厂库。(db);

日期时间类型

数据类型 存储范围 存储需求
TIME -838:59:59 ~ 838:59:59 3
DATE 1000-1-1 ~ 9999-12-31 3
DATETIME 1000-1-1 00:00:01 UTC ~ 9999-12-31 23:59:59 8
TIMESTAMP 1970-1-1 00:00:01 UTC ~ 2038-1-19 3:14:07 4
YEAR 1901~2155 1

如何设置主键

1、在创建表或在修改字段结构的时候,在主键字段的”索引”下拉菜单中选择“primary”。(一张表只允许设置一个主键,通常它是int自增的。)

 

2,数据库是独立;

二进制类型

小练习:

1、 新建一个产品product数据库

2、 在数据库中添加产品product表,并建立字段pId (主键)、pName(产品名称)、pModel(产品型号)、pPrice(产品价格)

3、 添加5条产品信息

4、 在数据库中再添加一个产品入库表(saveInLib),并建立字段:sid(主键)、pName(产品名称)、saveInTime(入库时间)、saveInCount(入库数量)。

5、 添加5条产品入库记录。

 

2,数据库是用来管理,查询,储存数据的;

JSON类型(ver5.7新增)

mySQL中的数据类型

在mySQL中每个字段,都必须明确它存放的数据的类型,一旦指定了类型,该字段(列)中的数据都必须符合这个类型的范围,否则就会引起错误。

 

并且字符等类型需要指定内容的最大长度。

 

1,实体;表名,按照对象来划分

存储引擎

int整数类型

只能存放整数

2,属性;字段

查看MYSQL支持的存储引擎

SHOW ENGINES

varchar字符类型

可以存储任一字符,包括符号、数字、字母,但是他们都会被当成字符为处理。

3,数据库种类;关系型,非关系型,层次型,网状型

查看支持的存储引擎信息

SHOW VARIABLES LIKE 'have%'

Date日期

用于存储日期和时间

3,编码设置;

查看默认的存储引擎

SHOW VARIABLES LIKE '%storage_engine%'

数值类型

TinyInt 非常小的整数存储格式,1字节(8位的二进制数),它的取值范围是:不带符号时0 ~ 255,带正负号时-128 ~ 127

SmallInt 小整数,2字节,不带符号时0~65535,带正负号时-32768~32767

MediumInt 中等整数,3字节,不带符号时0~16777215,带正负号时-8388608 ~ 8388607

Int 标准整数,4字节,不带符号时0 ~ 4294967295 ,带正负号时-2147483648 ~ 2147483647

BigInt 大整数,8字节,不带符号时0~18446744073709551615

 

Float 单精度浮点数,4字节,最小值,正负1.175494351E-58(1.175494351*10-58)最大值,正负3.102823466E+38(3.102823466E*1038)

Double 双精度浮点数,8字节,最小值,正负2.22507385072014E-308,最大值:正负1.17976931348623157E+308。

 

Decimal
以字符串形式存储浮点数。它的取值范围不是固定的,取决于用户指定的长度。

gbk;中日韩语言

常用存储引擎(注意各引擎优缺点)

  • InnoDB
  • MyISAM
  • Memory

数值类型的字段可以设置的参数:

gb1312;中文

约束条件

一个表只能有一个主键(PRIMATY KEY),但是能够有多个唯一(UNIQUE
KEY),唯一的字段的值不允许出现重复,但是NULL值不算做重复的值

  • PRIMARY KEY 主键,PRIMARY可省略 (注意:PRIMARY KEY(a,b,c,…)
    来定义一个主键时,由a,b,c,…所有的值才能确定一个主键,即一个表包括a,b,c…等字段,其中单独的a,b,c字段相等,是可以的,但不能全部相等,全部相等表明主键相等,不可插入。)
  • AUTO_INCREMENT 自增,需要和主键(PRIMARY
    KEY)搭配使用。可在创建表时自定义从某个数开始,如CREATE TABLE
    tbl_name(id INT key
    AUTO_INCREMENT,……)AUTO_INCREMENT=数值,表示内部自增字段从此数值开始。(也可通过ALTER
    TABLE tbl_name AUTO_INCREMENT=数值修改)
  • FOREIGN KEY 外键
  • NOT NULL 非空
  • UNIQUE KEY 唯一,KEY 可省略
  • DEFAULT 默认值 插入数据时可使用DEFAULT

unsigned属性

“整理”菜单中的unsigned选项,代表无符号,代表这一字段中的数值不能为负数,因为无符号就是代表没有正负号。如果“整理”菜单留空,什么都不选的话,就是代表有符号,可以为正数也可以为负数。

utf8;大型编码;

数据表的创建

CREATE TABLE [IF NOT EXISTS] tbl_name (
     字段名称 字段类型 [完整性约束条件] ##完整性约束条件顺序为: [UNSIGNED | ZEROFILL] [NOT NULL] [DEFAULT 默认值] [[PRIMARY] KEY | UNIQUE [KEY]] AUTO_INCREMENT
     ......
)ENGINE = 引擎名称 CHARSET = 编码方式;

unsigned zerofill属性

当数据的宽度小于类型的最大宽度时,则在数据前面自动填充0

4,默认引擎;

查看当前数据库下的数据表

SHOW TABLES;

auto_increment

自增

INNODB;默认的

查看表结构及创建信息

DESC tbl_name
DESCRIBE tbl_name
SHOW COLUMNS FROM tbl_name
SHOW CREATE TABLE tbl_name

默认à定义

这个选项代表,填充数据时如果该字段为空值时,所使用的默认值。

数据表的引擎一般都要设成INNODB

修改表结构

字符串数据类型

字符类型可以存储任何值,甚至是二进制形式的图像、声音、视频。

CHAR[M] 代表M字节的字符。

varChar 常用的字符存储格式,使用时需要指定最大内容长度。

5,常用的一些数据库

修改表名

ALTER TABLE tbl_name RENAME [TO|AS] new_name

或者

RENAME TABLE tbl_name TO new_name

存储大容量的文本

TinyBlob ,blob,TinyText,text

前两个是代表二进制字符串,后两个是代表非二进制字符串,都可以存储大量的文本信息。

MediumBlob,MediumText

LongBlob,LongText

sqlserver
,access是微软的数据库

添加字段

ALTER TABLE tbl_name ADD 字段名称 字段类型 [完整性约束条件]  [ FIRST | (AFTER 字段名称)] 

若需要添加多个字段,需要多个ADD操作,以“,”号分隔

枚举类型

ENUM / SET 类型

兴發国际娱乐手机登录,设置其默认值为(‘值1’, ‘值2’, ‘值3’,…),由用户指定多个可选值,字段中的值必须是其中之一,最多只能有65535个可选值。

 

oracle,mysql,java都是oracle公司的

删除字段

ALTER TABLE tbl_name DROP 字段名称

若需要删除多个字段,需要多个DROP操作,以“,”号分隔。

注意:添加字段(ADD)与删除字段(DROP)可以在同一个语句里面(ALTER TABLE
tbl_name ADD …..,DROP …..)

日期时间类型

Date 1000-01-01 ~ 9999-12-31

TIME -838:59:59~838:59:59

DateTime 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

TimeStmp 1970-01-01 00:00:00 到2037年的之间的某一个时刻

Year 存储1901~2155年的一个年份。

 

dbz
是IMB公司的

修改字段

ALTER TABLE tbl_name MODIFY 字段名称 字段类型 [完整性约束条件] [FIRST | (AFTER  字段名称)]

小练习:

1、 创建一张员工数据表,employee,包含字段:eId(标准整数,主键、自增)、姓名eName(varchar,50)、年龄eAge(tinyInt,无符号)、工号eNum(smallInt,不足的位数用0填充)、学历(枚举:初中~研究生)、性别(枚举:男,女)、出生日期(DateTime)、基本工资(Float,默认:1300)、自我介绍text。然后输入五名员工的信息。

 

 

T-SQL语言基础之增删改查

sybase
是sybase公司的;

修改字段名称

ALTER TABLE tbl_name CHANGE 旧字段名称 新字段名称 字段类型 [完整性约束条件] [FIRST | (AFTER  字段名称)]

SQL语句

是一门专门用于数据库操作的语言,SQL语句的语法不仅仅适用于mysql数据库,同时也适用于几乎所有的主流数据库。当然不同公司出口的数据库在语法细节上还是有些差异。

 

三,DDL;数据定义语句;设计语句

添加默认值

ALTER TABLE tbl_name ALTER 字段名称 SET DEFAULT 默认值

select语句

查询语句,专门用于在数据表中按照用户指定的条件进行查询。

1,基本命令

删除默认值

ALTER TABLE tbl_name ALTER 字段名称 DROP DEFAULT

简要语法描述:

SELECT <字段1,字段2,字段3…..> FROM <数据表名> [WHERE 筛选条件]

其中字段部分代表你想要从这张数据表中查询哪些字段(列),如果要查询所有字段,可以
* 号表示。

示例:

SELECT pName FROM product

//从产品表中查询所有产品名称

SELECT pName,pPrice FROM product

//从产品表中查询所有产品名称和价格

SELECT * FROM product

//从产品表中查询中所有产品的字段

SELECT pName,pPrice-30 FROM product

//在查询时给所有产品减30元

SELECT pName as '产品名',pPrice as '价格' FROM product

//在查询时修改结果集中的字段名

SELECT 3.1415926 *12 *12

//用select语句来进行数学运算

 

1,登录;mysql -h
localhost -uroot -p

添加主键

ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (字段名称,...) 

where子句

定义一个查询条件,然后在查询过程中用这个条件来筛选符合条件的记录。

 

SELECT * FROM product WHERE pPrice >=1000

查询价格大于等于1000的产品

SELECT * FROM product WHERE pPrice <>3000

SELECT * FROM product WHERE pPrice !=3000

查询价格不等于3000的产品

SELECT * FROM product WHERE pName = '中兴z954'

 

查询产品名称是中兴z954的产品信息(在mysql中双引号与单引号都表示字符串,但是推荐使用单引号,因为我们将来要学习的mssql server 中字符串用单引号表示)

2,退出;exit

删除主键

ALTER TABLE tbl_name DROP PRIMARY KEY

逻辑与and

SELECT * FROM product
WHERE pPrice <800 AND pId >6 AND pName ='Nokia v998'

 

3,查看当前时间日期;select
now();

添加唯一

ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY] [索引名称] (字段名称,...)

逻辑或or

SELECT * FROM product

WHERE pPrice <800 OR pId >6

 

4,当前日期;select
curdate();

删除唯一

ALTER TABLE tbl_name DROP  {INDEX| KEY} index_name

逻辑非not

SELECT * FROM product

WHERE not pName = '中兴z954'

 

 

5,当前时间;select
curtime();

修改表的存储引擎

ALTER TABLE tbl_name ENGINE=存储引擎名称

insert插入数据

向指定的数据表的指定字段插入一条记录。

6,打印版本信息;select
version();

修改表的自增长值

ALTER TABLE tbl_name AUTO_INCREMENT= 值

语法:

INSERT INTO 表名(字段1,字段2,字段3,……) values(值1,值2,值3,….)

其中,字段的位置与值的位置必须一一对应。

7,查看当前用户;select
user();

删除数据表

DROP TABLE [IF EXISTS] tbl_name[,tbl_name,...]

示例:

INSERT INTO userinfo(uName,uPhone,uIDCard)

VALUES('江小白','010-89562321','5001234567814541X')

 

向数据表中插入一条用户信息

 

INSERT INTO userinfo(uName) VALUES(‘张小强’)

插入一条用户信息,但是只有姓名,其他字段自动留空或使用默认值(如果其中某个字段设置为不允许为null,而没有默认值的话,就必须要给这个字段赋值了)。

 

INSERT INTO userinfo VALUES

(3,'王小虎','010-89562321','5001234567814541X')

 

可以省略字段名,但是所有的字段都必须按照顺序来依次赋值。包含主键ID(要按照顺序来填写主键值)

 

一次性插入多条语句

insert into student(sName,sAge,sSex,sPhone)

values('小黑',20,'女','010-89562314'),

('小强',20,'男','020-89562314'),

('小红',20,'女','021-89562314'),

('小黄',20,'男','019-89562314'),

('小李',20,'女','022-89562314')

 

 

8,启动mysql后台服务(管理员运行命令窗口);

数据操作(DML)

Update修改数据

根据指定的条件确定需要修改的行,然后修改指定字段的数据。

net start
mysql;

插入数据

语法:

update 数据表名 set 字段1=值1,字段2=值2,……..WHERE 条件

虽然where是一个可选参数,但是通常情况下都需要写where条件,如果不写就是修改整张表的所有行。

9,关闭mysql后台服务(管理员运行命令窗口);

不指定具体的字段

INSERT [INTO] tbl_name VALUE | VALUES (值,......)

示例:

UPDATE userinfo SET uName = '江老怪' WHERE uid = 1

 

修改第1条记录的姓名为江老怪

UPDATE userinfo SET uName = '江老怪'

 

修改所有行的用户名为江老怪

UPDATE userinfo

SET uName = '小二黑',uPhone='111111',uIDCard='11111111' WHERE uid = 3

 

 

net stop
mysql;

列出指定字段

INSERT [INTO] tbl_name (字段名称1,......) VALUE | VALUES (值1,......)

delete删除

根据条件删除指定的记录

2,操作库

同时插入多条记录

INSERT [INTO] tbl_name   [(字段名称1,......)]  VALUE | VALUES (值,......), (值,......),......

语法:

delete from 表名 where 条件

虽然where是一个可选参数,但是通常情况下都需要写where条件,如果不写就是删除整张表的所有行。

1,查看数据库;show
databases;

通过SET形式插入记录

INSERT [INTO] tbl_name SET 字段名称=值,......

示例:

DELETE FROM userinfo WHERE uid = 2

 

 

2,创建数据库;create
database 库名 字符集;

将查询结果插入到表中

INSERT [INTO] tbl_name   [(字段名称1,......)]  SELECT 字段名称 FROM tbl_name  [WHERE 条件]

小练习:

1、 记忆背诵增删改查指定的语法。

2、 手动新建一个数据库product,在其中新建数据表product,这个表中的字段:pid(主键)、pName(产品名)、pModel(型号)、pIntro(简介)、pFrom(产地)、pPrice(价格) 。

3、 用insert语句添加10条不同的产品数据

4、 查询

a) 查询所有产品数据

b) 查询所有产品的产品名和价格

c) 查询所有价格在2000以上的产品

d) 查询所有产品为重庆并且价格大于3000的产品

e) 查询所有产地不是重庆的产品

5、 将第5条记录的产品号修改为T1000

6、 删除所有价格小于5元的产品。

 

将第三题之后的sql语句复制到一个word文档中,然后组长检查组员,班长检查组长。

3、5、6每题20分。

第4题中的每个小题8分共40分

 

命令行与高级查询

3;删除数据库;drop
database 库名;

更新数据

UPDATE tbl_name  SET 字段名称=值,...... [WHERE 条件] [ORDER BY 字段名称] [LIMIT 限制条件]

Mysql命令行

1、 在phpstudy的右键菜单中,mysql工具 à mysql命令行

2、 弹出的命令框中提示”enter password”,输入默认密码root

3、 如果看到”you mysql connection”就说明你登陆成功了。

4、 在命令行中,每一条指令都必须以分号;结束,否则系统会认为你这条指令还没有完成,始终要求你继续输入。

 

3,修改数据库密码账户登录密码

删除数据

(DELETE FROM tbl_name  [WHERE 条件] [ORDER BY 字段名称] [LIMIT 限制条件])

或者彻底清空数据表

(TRUNCATE [TABLE ] tbl_name)

查看数据库列表

show Databases

1,用SET PASSWORD命令

查询数据操作(DQL)

选择数据库use

set
password for 用户名@localhost = password(‘新密码’); 

查询记录

SELECT select_expr[,select_expr,...]
[ 
    FROM table_reference
    [WHERE 条件]
    [GROUP BY {col_name | position } [ ASC | DESC], ... 分组]
    [HAVING 条件 对分组结果进行二次筛选]
    [ORDER BY {col_name | position } [ ASC | DESC], ... 排序]
    [LIMIT 限制显示条数]
]

格式:

use 数据库名

选定指定数据库为当前默认被操作的数据库。

在使用操作数据表中的数据之前,必须要选定一个当前数据库。

 

2,用mysqladmin

查询表达式

每个表达式表示想要的一列,必须至少有一列,多个列以”,”号分隔; “*”
表示所有列,tbl_name.*表示命名表的所有列。查询表达式可以使用 [AS]
alias_name 为其赋予别名。

罗列出当前数据库中的数据表

show tables

mysqladmin
-u用户名 -p旧密码 password 新密码 

WHERE条件

查询条件 符号 示例
比较 =,<,>,<=,>=,!=,<>,!>,!<,<=> SELECT * FROM table_name WHHERE id = 1
指定范围 BETWEEN AND,NOT BETWEEN AND SELECT * FROM table_name WHHERE id BETWEEN 1 AND 2
指定集合 IN,NOT IN SELECT * FROM table_name WHHERE id IN(1,3,5,7,9) 集合内忽略大小写
匹配字符 LIKE, NOT LIKE SELECT * FROM table_name WHHERE id LIKE ‘_2%’
是否为空 IS NULL,IS NOT NULL SELECT * FROM table_name WHHERE id IS NULL
多个查询条件 AND,OR SELECT * FROM table_name WHHERE user = ‘admin’ AND password = ‘admin’

模糊查询

  • %:代表0个,1个或者多个任意字符
  • _ :代表1个字符

罗列出数据表中的字段

格式:show columns from 表名

Describe 数据表名

 

3,用UPDATE直接编辑user表

GROUP BY 查询结果分组

默认情况下,GROUP BY 查询结果分组得到每组的第一个值
配合GROUP_CONCAT()得到分组详情
配合聚合函数

  • COUNT() NULL值不算一条记录
  • MAX()
  • MIN()
  • AVG()
  • SUM()

配合WITH ROLLUP记录上面所有记录的总和

数据库与数据操作

mysql>
use mysql; 

5.通过HAVING子句对分组结果进行二次筛选

配合GROUP BY 实现,比如:

SELECT Region,COUNT(*),MAX(Population),MIN(Population),SUM(Population),AVG(Population) FROM country GROUP BY Region HAVING MAX(Population) > 1000000

创建一个新的数据库

命令格式:create database
数据库名

mysql>
update user set password=password(‘123’) where

通过ORDER BY 进行排序

默认升序排列(ASC),可省略。降序排列(DESC),可排序多个字段通过”,”号连接

SELECT * FROM country ORDER BY Population ASC,SurfaceArea ASC
SELECT * FROM country ORDER BY 3 ASC
SELECT * FROM country ORDER BY RAND() #随机记录

在当前数据库中创建数据表

注意,在创建之前必须选择当前数据库。

格式:create table 表名(字段1 数据类型,字段2 数据类型,……)

示例:

create table stdInfo(

sName varchar(20),

sAge int,

sSex varchar(5)

);

 

user=’root’
and host=’localhost’; 

LIMIT限制查询结果显示条数

  • LIMIT 显示条数
  • LIMIT 偏移量,显示条数

(SELECT * FROM country LIMIT 2,1)

创建包含自增主键的数据表

示例:创建客户表:

create table customers(

 id int not null auto_increment,

 name varchar(20) not null,

 age int not null,

 address varchar(100) not null default 'empty',

 primary key(id)

);

 

说明:

not null 代表该字段不允许出现空值,就是说当你使用insert语句插入数据记录的时候,必须向这个字段赋值,否则数据操作将发生错误。

auto_increment 自增

Default 默认值

Primary key 指定数据表的主键

mysql>
flush privileges; 

连接查询

删除数据表

格式:drop table 数据表名

4,在忘记root密码的时候,可以这样

什么是链接查询

连接查询是将两个或者两个以上的表按照某个条件连接起来,从中选取需要的数据。连接查询是同时查询两个或者两个以上的表时使用的。当不同的表中存在相同意义的字段时,可通过该字段连接这几个表。

删除数据库

格式:drop database 数据库名

(1),
关闭正在运行的MySQL服务。 

内连接查询

  1. JOIN | CROSS JOIN | INNER JOIN
  2. 通过ON 连接条件
  3. 显示两个表中符合连接条件的记录

注意:三张表或者三张表以上查询可以直接加入更多的JOIN …ON
…来连接多张表,注意找准表之间的连接条件

例如:

SELECT 
    user_info.id, user_info.name, city_info.pro_name
FROM
    user_info
        JOIN
    city_info ON user_info.pro_id = city_info.pro_id;

更改表结构:增加字段

添加一个字段

alter table student add sScore float null;

 

其中:

add 代表增加一列

Null 代表这个字段允许空值。

student 是数据表名

sScore 是新增的字段名,后面是数据类型。

(2),
打开DOS窗口,转到mysql\bin目录。 

外连接查询

更改表结构:删除字段

alter table student drop column sScore;

 

其中:

drop column 代表删除字段操作

sScore 要被删除的字段名

student 是表名

(3),输入mysqld
–skip-grant-tables 回车。

左外连接

(LEFT [OUTER] JOIN)

显示左表的全部记录及右表符合连接条件的记录

重命名数据表

rename table student to sInfo;

 

注意:to前面是修改前的原表名,to后面是修改后的新表名。

–skip-grant-tables
的意思是启动MySQL服务的时候跳过权限表认证。 

右外连接

(RIGHT [OUTER] JOIN)

显示右表的全部记录及左表符合连接条件的记录

更改表结构:添加自增主键

alter table product

 add pid int

 not null

 primary key

 auto_increment

 first;

 

其中

primary key 设置新字段为主键

first 将新字段放在其他字段的前面,处于第一位。

 

(4),再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),

外键

小练习:

请同学把所有SQL都写到一个SQL文件中,按“班级-姓名(可以是拼音).SQL”的方式保存

某学校的学生管理数据库中有学生表(T_STUDENT)、班级表(T_CLASS),表结构及存储的数据如下表所示:

学生表(T_STUDENT):

STU_ID

(int, 主键,学号)

STU_NAME

(nvarchar(10),姓名)

STU_AGE

(int,年龄)

STU_CID

(int,外键,班级号)

1

张三

18

1

2

钱四

16

2

3

王玲

17

3

5

李飞

19

4

9

赵四

18

5

10

李可

20

6

11

张飞

18

7

12

周瑜

16

8

13

王亮

17

7

14

董庆

19

1

15

赵龙

18

2

16

李丽

20

3

班级表(T_CLASS):

CLS_ID

(int, 主键, 班级号)

CLS_JOB

(nvarchar(50), 专业名)

CLS_DEPART

(nvarchar(50), 系名)

CLS_DATE

(int, 入学年份)

1

软件

计算机

2013

2

微电子

计算机

2013

3

无机化学

化学

2014

4

高分子化学

化学

2012

5

统计数学

数学

2015

6

现代语言

中文

2016

7

国际贸易

经济

2013

8

国际金融

经济

2014

 

用 SQL 语言完成以下功能

  1. 建库、建表,要求添加主键
  2. 插入指定的数据
  3. 找出所有年龄小于19岁的学生学号、姓名、年龄。
  4. 学生张三转到化学系 111
    班,请更新相关的表。
  5. 删除班级表的主键这一列。
  6. 将学生表改名为T_STD
  7. 为班级表添加字段CLS_COUNT人数字段
  8. 为班级表添加主键。
  9. 删除班级表

 

 

mysql_4_聚合函数

转到mysql\bin目录。 

概览

外键是表的一个特殊字段,被参照的表是主表,外键所在字段的表为子表。设置外键的原则需要记住,就是依赖于数据库中已存在的表的主键。外键的作用是建立该表与其父表的关联关系。父表中对记录做操作时,子表中与之对应的信息也应有相应的改变。
外键的作用是保持数据库的一致性和完整性。
可以实现一对一或者一对多的关系

注意

  1. 父表和子表必须使用相同的存储引擎,而且禁止使用临时表。
  2. 数据库的存储引擎只能为InnoDB。
  3. 外键列和参照列必须具有相似的数据类型其中数字的长度或是否有符号位必须相同:而字符的长度则可以不同。
  4. 外键列和参照列必须创建索引。如果外键不存在索引的话,MYSQL将自动创建索引。

外键约束的参照操作:

  • CASCADE:从父表删除或者更新且自动删除或者更新子表中匹配的行。
  • SET
    NULL
    :从父表删除或者更新行,并设置子表的中的外键列为NULL。如果使用该选项必须保证子表列中没有指定NOT
    NULL。
  • RESTRICT:拒绝对父表的更新或者删除操作。
  • NOT ACTION: 标准SQL的关键字,在MYSQL中与RESTRICT相同

mysql数据库的备份与恢复

(5),输入mysql回车,如果成功,将出现MySQL提示符
>。 

创建外键(先有主表)

CREATE TABLE [IF NOT EXISTS] tbl_name (
 字段名称 字段类型 [完整性约束条件] ##完整性约束条件顺序为: [UNSIGNED | ZEROFILL] [NOT NULL] [DEFAULT 默认值] [[PRIMARY] KEY | UNIQUE [KEY]] AUTO_INCREMENT
...
[CONSTRAINT 外键名称] FOREIGN KEY(字段名) REFERENCES 父表(字段名) [ON {DELETE | UPDATE } {CASCADE | SET NULL }] [ON {DELETE | UPDATE } {CASCADE | SET NULL}]
)

备份

在phpmyAdmin中使用“导出”功能将数据表的结构与数据保存为一个.sql文件(保存格式选择SQL)

(6),连接权限数据库:
use mysql; 。 

删除外键

(ALTER TABLE tbl_name DROP FOREIGN KEY)

恢复

在phpmyAdmin中点击“导入”,选择.sql文件的路径(格式选择SQL),点击执行。

 

(7),
改密码:update user set password=password(“123″) where
user=”root”;

添加外键

(ALTER TABLE tbl_name ADD [CONSTRAINT 外键名称]  FOREIGN KEY(字段名) REFERENCES 父表(字段名))

示例:

部门表(父表)

id depName
1 教学部
2 技术部
3 运营部
4 市场部
CREATE TABLE IF NOT EXISTS department (id TINYINT UNSIGNED AUTO_INCREMENT KEY,depName VARCHAR(20) NOT NULL UNIQUE)ENGINE=INNODB;

员工表(子表)

id username depId
1 King 1
2 Zhang 3
3 Ling 2
4 Jack 4
CREATE TABLE IF NOT EXISTS employee (id TINYINT UNSIGNED AUTO_INCREMENT KEY,userName VARCHAR(20) NOT NULL UNIQUE,depId TINYINT UNSIGNED)ENGINE=INNODB;

如果只删除父表中部门4,那么员工表中还有属于部门4的员工存在,这显然是不合适的,这时,可以使用外键来解决

创建外键(先有主表):

CREATE TABLE IF NOT EXISTS employee (id TINYINT UNSIGNED AUTO_INCREMENT KEY,userName VARCHAR(20) NOT NULL UNIQUE,depId TINYINT UNSIGNED , FOREIGN KEY(depId) REFERENCES deparment(id) )ENGINE=INNODB;

mysql中的聚合函数

就是对指定字段中的一列数据进行统计和运算的函数。

(别忘了最后加分号) 。 

联合查询

GROUP BY分组

在指定字段中将数据内容重复的记录,聚合为一组。剔除重复的值。

示例:

SELECT * FROM student GROUP BY sSex

SELECT sName FROM student GROUP BY sAge

 

(8),
刷新权限(必须步骤):flush privileges; 。 

UNION

(SELECT 语句 UNION SELECT 语句)

COUNT 统计个数

用于统计(按条件)查询出聚合后的记录或查询的结果一共有多少条。示例:

SELECT COUNT(*) FROM student //统计表中一共有多少条记录

SELECT COUNT(1) FROM student //同上,性能更强。

SELECT COUNT(1) FROM student WHERE sAge>17 //统计符合条件的记录总数

SELECT COUNT(1),sSex FROM student GROUP BY sSex

//将GROUP BY与COUNT两个函数结合起来使用,按性别进行分组统计。

 

(9),
退出 quit。 

UNION ALL

(SELECT 语句 UNION SELECT 语句)

注意:UNION 和 UNION ALL 的区别是UNION
去掉相同记录,UNION是简单的合并到一起

AVG求平均值

格式:AVG(字段名)

对指定的字段中(一列中) 的数据值进行求平均值的运算。

SELECT AVG(sAge) FROM student

SELECT AVG(sScore) FROM student WHERE sAge<=18

SELECT AVG(sScore),sSex FROM student GROUP BY sSex

 

 

(10),
注销系统,再进入,使用用户名root和刚才设置的新密码123登录。

子查询

GROUP_CONCAT分组连接

将一张表中的多行记录中的指定的字段值,连接成一个字符串。每个值之间以逗号进行分隔。通常用于得到聚合后的每个分组中包谷的成员。

SELECT GROUP_CONCAT( sName ) FROM student

//连接所有学生的姓名

SELECT GROUP_CONCAT( sName ) FROM student WHERE sAge>18

//连接所有18岁以上的学生姓名

SELECT GROUP_CONCAT(sName),sSex FROM student GROUP BY sSex

//得到所有男生和女生的名单

 

 

四,DML;数据操作语句;增删改

什么是子查询

子查询是将一个查询语句嵌套在另一个查询语句之中。内层查询语句的查询结果,可以为外层查询语句提供条件

ORDER BY排序

按照指定的字段的值的大小的次序,来排列查询的结果。

SELECT * FROM student ORDER BY sScore

//通过成绩来排列学生。默认为升序(从小到大)

SELECT * FROM student ORDER BY sScore DESC

//通过成绩来排列学生。添加DESC就是降序(从大到小)

 

 

1,表的增删改查

引发子查询的情况

  • 使用 [NOT] IN 的子查询
  • 使用比较运算符的子查询 = > < >= <= <> != <=>
  • 使用 [NOT] EXISTS 的子查询
  • 使用 ANY | SOME 或者 ALL的子查询
符号 ANY SOME ALL
>,>= 最小值 最小值 最大值
<,<= 最大值 最大值 最小值
= 任意值 任意值
!=,<> 任意值

示例:

SELECT name FROM user where depId IN(SELECT id FROM ids)
SELECT name FROM user where depId >=(SELECT id FROM ids)
SELECT name FROM user where EXISTS(SELECT id FROM ids)

最大值最小值MAX()、MIN()

在查询结果中的指定字段中找到最大的值或最小的值。

SELECT MAX(sScore) FROM student

//得到成绩最高分数

SELECT MIN(sScore),sSex FROM student GROUP BY sSex

//分别得到男生和女生最低分

 

 

1,进入库;

将查询结果写入到数据表

(INSERT [INTO] tbl_name  [(col_name),......] SELECT ...)

求和sum()

在查询结果中对指定字段的值求和。

SELECT SUM(sSCore) FROM student

//全班总分

SELECT SUM(sSCore),sSex FROM student GROUP BY sSex

//查看男生总分和女生总分

 

 

use
库名称;

创建数据表的同时将查询结果写入到数据表

CREATE TABLE [IF NOT EXISTS] tbl_name (
  [(creat_defination)]
  select_statement

小练习:

1、用Create指令创建一个产品销售记录数据表,包含字段:产品名、销售地区、销售数量、销售金额。(10分)

2、假设本公司出售的产品只有三种,销售地区也只有三个。用insert语句插入十条产品销售记录。(产品与销售地区肯定有重复值。)(15分)

3、统计每种产品的销售总额(10分)

4、统计每种产品的平均销售额。(10分)

5、统计每种产品的销售总数量。(10分)

6、在每个地区销售的每种产品的名称,连接成一个以逗号分隔的字符串。(15分)

7、同时统计每种产品的最大销售额。(10分)

8、统计产品在每个地区的最低销售额。(10分)

9、得到总销售额。(10分)

 

 

 

 

 

 

 

mysql_高级查询

2,创建表;

正则表达式查询

数据过滤通配符

通配符,就是指能够通用的匹配其他字符的符号。

create table
student(表结构 类型,表结构 类型);

REGEXP ‘匹配方式’

(SELECT * FROM user WHERE REGEXP '^[1-9]$')

%通配符

%代表任意个数的任一字符,它通常是用在select语句中与LIKE关键配合使用的。

5,删除表;

常用匹配方式

模式字符 含义
^ 匹配字符串开始
$ 匹配字符串结尾
. 匹配字符串任一字符,包括换行和回车
[字符集和] 匹配字符集合的任一字符
[^字符集和] 匹配除了字符集合以外的任一字符
s1 | s2 | s3 匹配s1、s2、s3任一字符串
* 代表0个、1个或者多个其前的字符
+ 代表1个或者多个其前的字符
字符串{N} 字符串出现N次
字符串{M,N} 字符串至少出现M次,最多N次

示例:

SELECT * FROM student WHERE sName LIKE '王%'

 

查找所有姓王的学生

LIKE关键字在这里代表模糊查询,不是像=那样必须完全匹配。

 

SELECT * FROM student WHERE sName LIKE '%五'

 

查找以“五”字结尾的数据

 

SELECT * FROM student WHERE sName LIKE '%老%'

 

查找中间包含“老”字的字符。

注意:即使数据的开头或结尾为空,依然可以匹配到数据,因为%不但代表任意个数的任意字符,它同样也可以代表没有字符。

drop table
表名称

运算符

注意事项:

1、%不但代表任意个数的任意字符,它也可以空字符。

2、数据尾部的空格可能会干扰通配符的搜索,比如:现有数据’abc
 ’,如果它最后有一个或多个空格的话,则
%abc将不会查找到该数据,因为后面多余的空格也是字符。解决方法是前后都加上%。

3、%不能匹配null值。

 

6,修改表名称;

算数运算符

符号 表达式 作用
+ X1+X2 加法
X1-X2 减法
* X1*X2 乘法
/ X1 / X2 除法
DIV X1 DIV X2 除法
% X1 % X2 取余
MOD X1 MOD X2 取余

_(下划线)通配符

_ 通配符的作用与%类似,但是它只能匹配单个任意字符。

 

alter table 表名称
rename 新表名称;

比较运算符

符号 形式 作用
= X1=X2 判断是否相等
!=或<> X1!=X2或X1<>X2 判断是否不相等
<=> X1<=>X2 判断是否相等,可以判断是否等于NULL
>,>= X1>X2,X1>=X2 判断是否大于等于
<,<= X1<X2,X1<=X2 判断是否小于等于
IS NULL 或 IS NOT NULL x1 IS [NOT] NULL 判断是否等于NULL
BETWEEN … AND … 或者 NOT BETWEEN … AND… X1 BETWEEN m AND n 判断是否在范围内
IN 或 NOT IN X1 IN (值1,…) 判断是否在一个固定范围内
LIKE 或 NOT LIKE X1 LIKE 表达式 判断是否匹配
REGEXP REGEXP 正则表达式 判断是否正则匹配

示例:

SELECT * FROM student WHERE sName LIKE '小_'

SELECT * FROM student WHERE sName LIKE '小__'

 

查找以“小”开头的之后任意两个字符的数据,而且必须是两个字。

 

注意:下划线与%不同的是前者不匹配字符,必须得有一个字符才能匹配。

 

SELECT * FROM student WHERE sName LIKE '_老_'

 

 

7,查看表;

逻辑运算符

符号 形式 作用
&& 或 AND 并且
||或 OR 或者
! 或 NOT 取反
XOR 异或 不同为真

SELECT 查询中的关键字

show
tables;

运算符的优先级

优先级 运算符 优先级 运算符
1 ! 8 |
2 ~ 9 =,<=>,>>=,<,<=,!=,<>,LIKE,IN,IS NULL,REGEXP
3 ^ 10 BETWEEN AND,CASE,THEN,WHEN,ELSE
4 *,/,DIV,%,MOD 11 NOT
5 +,- 12 &&,AND
6 >>,<< 13 ||,OR,XOR
7 & 14 ;=

注意: 可以使用()改变优先级

in关键字

在一个集合中进行匹配,只要数据与集合中的任意一项相同,就以为数据满足条件。

 

SELECT * FROM student WHERE sAddress IN('北京','西安','天津','山东')

 

查找地址是 北京,西安,天津 或 山东的学生信息

 

9,查看新增表的正规写法;

MYSQL中的函数

limit关键字

limite后面需要跟两个数字,代表从指定的记录开始(使用数据记录在物理上的次序而不是ID),查找多少条记录出来。

show create table
表名称;

数学函数

名称 描述
CELL(x) 进一取整
FLOOR(x) 舍一取整
MOD(x,y) 取余数(取模)
POWER(x,y) 幂运算
ROUND(x) 四舍五入
TRUNCATE(x,y) 数字截取
ABS() 取绝对值
PI() 圆周率
RAND()和RAND(X) 返回0~1之间的随机数,RANX(X)
SIGN(X) 返回X的符号,-1为负数,0,1为正数
EXP(X) 计算e的几次方

注意:

1、 次序是从0开始的,也就是说第一条记录的序号是0

2、 这里的序号不等于ID,它仅仅是代表排列次序。

3、 LIMIT关键字是mysql所独有的,比如:mssql和Oracle中就没有Limit关键字。

 

SELECT * FROM student LIMIT 3,2

 

从第4条记录开始,获取之后的两条记录。

 

2,字段增删改;

字符串函数

名称 描述
CHAR_LENGTH(x) 返回字符串字符数
LENGTH(x) 返回字符串长度
CONCAT(s1,s2,…) 合并字符串
CONCAT_WS(x,s1,s2,…) 以指定分隔符连接连接字符串
UPPER(x)/UCASE(x) 将字符串转化为大写
LOWER(x)/LCASE(x) 将字符串转化为小写
LEFT(S,N)/RIGHT(S,N) 返回字符串的前/后N个字符
LPAD(S1,LEN,S2)/RPAD(s1,LEN,s2) 将字符串s1用s2 填充到指定的LEN
LTRIM(s)/RTRIM(s)/TRIM(s) 去掉字符串空格
TRIM(s1 FROM s) 去掉字符串S中结尾处和开始处的s1
REPEAT(S,N) 重复字符串的指定次数
SPACE(N) 返回N个空格
REPLACE(s,s1,s2) 从字符串s中搜索s1,替换s2
STRCMP(s1,s2) 比较字符串,>=<分别返回1,0,-1
SUBSTRING(S,N,LEN) 截取字符串
REVERSE(S) 反转字符串
ELT(N,S1,S2) 返回指定位置的字符串

join关键字 – 链表

join关键字用于在数据库中同时查询多张存在关联关系的数据表。

 

1,添加字段;

日期时间函数

名称 描述
CURDATE(),CURRENT_DATE() 返回当前日期
CURTIME(),CURRENT_TIME() 返回当前时间
NOW() 返回当前日期时间
MONTH(D) 返回日期中月份的值
MONTHNAME(D) 返回日期中月份的名字
DAYNAME(D) 返回日期中的星期几
DAYOFWEEK(D) 返回一周内的第几天,1代表星期日
WEEKDAY(D) 返回日期是星期几,0代表星期一
WEEK(D) 一年中的多少个星期
YEAR(D) 返回日期中年份的值
HOUR(T) 返回时间中的小时
MINUTE(T) 返回时间中的分钟数
SECOND(T) 返回时间中的秒数
DATEDIFF(D1,D2) 返回D1,D2的间隔天数

as关键字

用于对字段段取一个别名

SELECT sName as '姓名',sAge as '年龄',sAddress as '地址' FROM student

 

 

alter table
字段名称 add 定义列;

条件判断函数

名称 描述
IF(EXPR,V1,V2) 如果EXPR成立,返回V1,否则V2
IFNULL(V1,V2) 如果V1 不为空,显示V1的值;否则V2
CASE WHEN expr1 THEN v1 [WHEN expr2 THEN v2 ] [ ELSE vn] END CASE表示函数开始,END表示函数结束。如果表达式expr1成立时,返回v1.如果表达式expr2成立时,返回v2.以此类推,最后遇到ELSE时,返回vn的值。

多表查询

2,修改字段;

系统信息函数

名称 描述
VERSIOn() 返回数据库版本号
CONNECTION_ID() 返回数据库连接数
DATABASE(),SCHEMA() 返回当前数据库名
USER(),SYSTEM_USER 返回当前用户
CURRENT_USER() 返回当前用户
CHARSET(s) 返回字符串s 的字符集
COLLATION(s) 返回字符串s 的检验字符集
LAST_INSERT_ID() 返回最近生成的AUTO_INCREMENT的值

内连接

就是指仅仅查询两张表中有关联关系的数据,而没有关联关系的数据是不会被查询出来的。

 

 
   

 

alter table 表名称
change 旧字段名称 新字段名 类型;

加密函数

名称 描述
MD5(str) 信息摘要算法
PASSWORD(str) 密码算法(ver5.6过时)
ENCODE(str,pwd_str) 加密结果是一二进制数,必须使用Blob字段保存
DECODE(crypt_str,pwd_str) 对通过ENCODE加密之后的内容解密

方式一:select同时from多张多

在select的from语句后同时写入多张表的名字,然后在where条件语句中写入多表之间的连接条件。

 

示例:

SELECT * FROM student,score WHERE student.sid = score.sid

 

注意:内连接之中,要分主表和附表,附表只是用于对主表所缺少的内容进行补充,比如上例中,主表是学生成绩,student学生只是在补充主表中缺少的学生姓名等数据。

SELECT

student.sName as '姓名',

   student.sAge as '年龄',

   score.sProject as '科目',

   score.score+10 as '成绩',

   score.sid as '编号'

FROM student,score

WHERE student.sid = score.sid

 

 

在多表查询的时候,为了避免由于字段名重复而产生错误,我们可以在字段名前面加上表名,以示区分。

 

3,
删除字段;

其他常用函数

名称 描述
FORMAT(x,n) 将数字x进行格式化,将x保留到小数点后n位
ASCII(x) 返回字符串x的第一个字符的ASCII码
BIN(x) 返回x的二进制编码
HEX(x) 返回x的十六进制编码
OCT(X) 返回x的八进制编码
CONV(x,f1,f2) 返回将x从f1进制数变成f2进制数
INET_ATON(ip) 将ip地址转换为数字
INET_NTOA(n) 将数字转化为IP地址
GET_LOCK(name,time) 定义锁
RELEASE_LOCK(name) 释放锁

方法二:inner join

使用inner join同样可以完成上例中的功能,而且主表与附表、连接条件一目了然。INNER JOIN子句的前面是主表,后面是附表,ON后面是表连接的条件。

 

SELECT

   student.sName as '姓名',

   student.sAge as '年龄',

   score.sProject as '科目',

   score.score as '成绩',

   score.sid as '编号'

FROM score INNER JOIN student

ON score.sid = student.sid

 

 

注意:省略INNER直接写JOIN关键字,也是内部连接。

 

alter table 表名称
字段名;

索引

左连接

在两张表联合查询的时候,我要显示主表中包括没有关联关系的数据在内的所有数据。

 

SELECT * FROM score

LEFT JOIN student

ON score.sid = student.sid

 

 
   

 

4,查看字段结构;

什么是索引

  • 索引由数据库中一列或者多列组成,其作用是提高对表中数据的查询速度
  • 索引的优点是可以提高检索数据的速度
  • 索引的缺点是创建和维护索引需要耗费时间
  • 索引可以提高查询速度,减慢写入速度

右连接

查询附表(JOIN关键字之后的表)中包含没有关联关系的数据在内的所有数据。

SELECT * FROM score

RIGHT JOIN student

ON score.sid = student.sid

 

desc
表名称;

索引分类

  • 普通索引
  • 唯一索引(UNIQUE)
  • 全文索引(FULLTEXT)
  • 单列索引
  • 多列索引
  • 空间索引(数据类型为GEOMETRY,存储引擎为MyISAM)SPATIAL

多张表连接

示例:

SELECT * FROM score

INNER JOIN student ON score.sid = student.sid

INNER JOIN class ON student.cid = class.cid

 

3,添加数据;

创建索引

通过关键字IN来进行关联查询

查询所有数学成绩在60分以上的学生的信息。

Select * from student where

sid in

(

    SELECT sid FROM score

    WHERE score >60 And sProject = '数学'

)

 

IN在此处表示,sid必须与()内的查询结果之一相等。

 

1,增加对应数据;

创建表的时候创建索引

CREATE TABLE [IF NOT EXISTS] tbl_name (
     字段名称 字段类型 [完整性约束条件] ##完整性约束条件顺序为: [UNSIGNED | ZEROFILL] [NOT NULL] [DEFAULT 默认值] [[PRIMARY] KEY | UNIQUE [KEY]] AUTO_INCREMENT
     ......
 [UNIQUE | FULLTEXT | SPATIAL ] INDEX|KEY [索引名称](字段名称[(长度)] [ASC|DESC]) 
)ENGINE = 引擎名称 CHARSET = 编码方式;

insert into
表名称(字段1,字段2……..)values(‘j138’,”红瓦寺”…….)选择插入某些列;

在已存在的表上创建索引

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

或者

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

2,增加某行数据

删除索引

(DROP INDEX 索引名称 ON tbl_name)

insert into
classes values(null,’j139′,”红瓦寺”) 插入所有列,自增粘以null占位

其他

3,增加全部数据

注释

  • 以‘– ’ 为前缀
  • 以’#’ 为前缀
  • 字段注释通过COMMENT ‘…..’进行注释

INSERT INTO
t_student VALUES

(1,’张三’,20,’男’),

(2,’李四’,25,’男’),

(3,’王五’,19,’女’)

4,
拷贝数据

从classes表中查询所有的class_name
插入到className表中的(class_name)字段

insert into
新表名(新字段名) select 旧字段名 from 旧表名

insert into
className(class_name) select class_name from classes

4,修改数据;

1,修改某行的数据

update 表名称 ste
字段名,字段名=值 where id;

UPDATE 表名 SET
列1=新值1,列2=新值2 WHERE 过滤条件

2,修改某列的某个数据

UPDATE classes set
class_name=null where class_id=3

” 和null
一样吗?? 严格意义不一样

5,删除数据;

1,删除一行数据

delete form 表名称
where id;

2,删除年龄在18-20

DELETE FROM
t_student WHERE 年龄 BETWEEN 18 AND 20

delete from
student where age>=18 and age<=20

6,注意

1,t_表示表名;字段
英文 field

2,f_表示字段名;表格
英文 table

3,pk_表示主键;主键约束
primary
key

4,fk_表示外键;外键格式
foreign key;

5,外键名规则;FK_本表名_与之关联的表的名字

6,有主从表的时候数据插入先插主表,在插从表;有外键的是主表

7,sql语句中也可以用true和flas,true表示1一般代表男,flas表示0一般代表女,是int型

五,DCL;数据控制语句;控制

1,索引

1,创建索引;

create index
索引名称 on 表名称(列名称,列名称…….);一个表可以有多个索引;

2,删除索引;

alter table
student drop index 索引名称;

3,特点;数据的更新和索引的更新是同步的

普通索引可以加到多列上

4,索引的缺点;

数据与索引的更新是同步的,如果全部数据都有索引就会降低效率;

索引是以文件形式存在的,索引过多文件会很大;

2,数据库的数据完整性;

保证每行所代表的实体能互相区别,不能存两条一抹一样的

1,主键约束(primary
key)非空不能重复;一个表只能有一个主键一个主键可以有多个列

2,唯一约束(unique)指定的列非空的不能重复

3,非空约束(not
null)指定的列不能为空;

4,指定数据(default)指定的数据可以更改;

5,指定有效数据(check(第一个数据
or 第二个数据格式(健名=值)))

不是第一个数据必须是第二个数据,不能有第三个数据出现

(在mysql中无效,支持创建但没有功能)

6,auto_increment;主键自增长;

3,外键

1,创建一个表,在表中外键字段与上一个关系表绑定

class_id
int,

CONSTRAINT 外键名
FOREIGN key(要把外键给那个字段的字段名)

REFERENCES
关系表的表民(主键)

CONSTRAINT
FK_student_classId FOREIGN key(class_id)

REFERENCES
classes(class_id)

2,怎么给已存在的表添加外键约束

1,添加要连的键

alter table 表名
add 字段 类型

alter table test
add class_id int

2,添加CONSTRAINT

alter table 表名
add CONSTRAINT 外键名

FOREIGN
key(要把外键给那个字段的字段名)REFERENCES 关系表的表民(主键)

alter table test
add CONSTRAINT FK_TEST_CLASSID

FOREIGN
key(class_id) REFERENCES classes(class_id)

3,删除外键

alter table 表名
drop FOREIGN key 外键名

alter table test
drop FOREIGN key FK_TEST_CLASSID

4,外键命名规则

1,一对一唯一外键关联,一对一必须保证外键唯一性,加唯一性约束

增;主键在谁身上就先增加谁;

删;外键在谁身上就先删谁;

2,一对多外键必须设计在多方身上

增;先增主表后增从表

删;先删从表在删主表

3,多对多,需要新建中间表来保存对应关系表,外键咋中间关系表身上

增;先增两表,在增中间表

删;先删中间表,再删两表

4,注意

1,一个外键对应一个主键,外键和外键约束是分开的,

2,外键必须链接主键(many2one)

3,联合主键写法;一个表只能有一个主键,但一个组键可以有多个列

primark(第一个主键,第二个主键);

4,主键的特性

主键非空唯一,

主键不能被修改,

主键不能为不存在,

不能被业务操作

六,DQL;数据查询语句;查

1,where
条件;

1,比较符号;

>,<
,>=, <= ,!=,(<>也表示不等于)

2,逻辑比较

and 并且

or 或者

between 下线 and
上线

like 模式
格式;

like
“_”下划线代表单个字符

like“1%2%3”
代表任意字符123处都可以添加关键字

in()
只取()中的字符;(1,2,3)只能取123

not in()
不取()中的;not;非的意思

2,排序(order
by)
,asc;代表升序,desc;代表降序

order by 排序的列
asc // 永远写在最后整个查询的最后

limit 1,3;limit
起始位置,截取长度。

3,分组

在where后边加group by
按什么类型分组与count联合使用

selsct count(*)
from 表名 group by 分组的类型,按什么分组;

分组后也能过滤用having分组后再来筛选,where写在分组前,having写在分组后

分组后只能与与分组相关的结果级打印;

4,mysql聚合函数

1,sun();求和;

select sun(all
求哪一列的和) from 表名称

发表评论

电子邮件地址不会被公开。 必填项已用*标注