mysql数据库基础知识,(2)多字段联合主键

mysql数据库基础知识,命令窗口查询mysql版本(管理员运行命令窗口),盘与盘之间不需要cd,需要多个DROP操作,唯一的字段的值不允许出现重复,(1)单字段主键,在表tb中有一个键deptld与这个id关联

mysql数据库根底知识

mysql笔记

数据库操作(DDL)

1.创办表:以前要求use database database_name 然后create table 表名();

例:成立职员和工人表tb_employee1,结构如下表所示

字段名称

数据类型

备注

id

int(11)

员工编号

name

varchar(25)

员工名称

depld

int(11)

所在部门编号

salary

float

工资

mysql> create database aa;
mysql> use aa;
mysql> create table tb_employee1(id int(11),name varchar(25),depld int(11),salary float);

 

何以是数据库

数据库看名就可见意思,正是用来积攒数据的工具,用叁个比例形象的例证来比喻,正是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

2.主键节制:主键又称主码,是表中一列或多列的整合。主键节制必要主键列的多少唯生机勃勃,并且不能为空。主键能够唯风流倜傥标志表中的一条记下,能够组合外键来定义分歧数据表之间的涉嫌,何况能够加快数据库查询速度。主键分为二种类型:单字段主键和多字段联合主键。

(1卡塔 尔(英语:State of Qatar)单字段主键

mysql> create table tb_employee1(id int(11)primary key,name varchar(25),depld int(11),salary float);
mysql> create table tb_employee1(id int(11),name varchar(25),depld int(11),salary float,primary key(id));

(2卡塔尔国多字段联合主键

mysql> create table tb_employee1(id int(11),name varchar(25),depld int(11),salary float,primary key(id,name));

 

关系型数据库

即使以行与列构成的二维数据表的花样,用来储存数据的,何况将多张数据表存款和储蓄在一个单元中的存款和储蓄方式,就叫做关系型数据库。

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

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

SHOW { DATABASES | SCHEMAS }

3.外键约束:外键用来在七个表之间创建联系,它能够是一列也许多列。一个表能够有四个依旧多少个外键。外键对应的是参照完整性,一个表的外键可以是空值,若不为空值,则每二个外键必需等于另叁个表中主键的有些值。

上面介绍几个概念。是表中的三个字段,它能够不是本表的主键,但对应其它三个表的主键。外键的基本点功能是保险数据援引的完整性,定义外键后,不相同意删除在另贰个表中具备关联关系的主键。举例:部分表的主键id,在表tb中有一个键deptld与那一个id关联。

主表(父表卡塔尔:对于七个颇负关联关系的表来说,相关字段中主键所在的不行表正是主表。

从表(自表卡塔 尔(英语:State of Qatar):对于五个有着关联关系的表来说,相关字段中外键所在的十三分表便是从表。

例:定义数据表tb_employee5,而且在该表中成立外键约束

创设五个机关表tb_dept1,表结构如下表所示

字段名称

数据类型

备注

id

int(11)

部门编号

name

varchar(22)

部门名称

location

varchar(50)

部门位置

mysql> create table tb_dept1(id int(11)primary key,name varchar(22),location varchar(50));
定义数据表tb_employee5,让它的deptld字段作为外键关联到tb_dept1的主键id:
mysql> create table tb_employee5(id int(11)primary key,name varchar(25),deptld int(11),salary float,constraint fk_emp_dept1 foreign key(deptld) references tb_dept1(id));

 

数据表

由行与列构成的二维结构的囤积数据的表格。

has
a;生命周期,具备,自个儿的

翻开数据库的概念

SHOW CREATE  { DATABASE | SCHEMA } db_name

4.非空羁绊(not null卡塔尔国:是指字段的值不能够为空。对于利用了非空节制的字段,假使顾客在抬高数量时并未有一点名值,数据库系统会报错。

记录

不怕数据表中央银行,大器晚成暴行数据大家就称为一条数据记录。

经常来讲,每条数据记录都有三个ID号,大家得以把这么些id明白成是excel中的行号,用来对每条记下举行区分与标志。

use
e;使用,传进来的

翻开上一步操作的告诫音讯

SHOW WARNINGS

语法则则:字段名 数据类型 not null

例:定义数据表tb_employee6,钦赐职员和工人的称谓无法为空

mysql> create table tb_employee6(id int(11)primary key,name varchar(25)not null,deptld int(11),salary float);

 

主键

许多时候我们将id称为主键,主键那是指那张表的排列顺序的依赖。

and;和

删去数据库

DROP  { DATABASE | SCHEMA } [IF EXISTS] db_name

5.唯意气风发性约束:必要该列唯后生可畏,允许为空,但只好现身一个空值。唯生机勃勃性限制可以确定保障一列要么多列都不能够冒出重复值。

(1卡塔 尔(阿拉伯语:قطر‎在概念完列之后直接钦定唯后生可畏约束

语法则则:字段名 数据类型 unique

mysql> create table tb_dept2(id int(11)primary key,name varchar(22)unique,location varchar(50));

(2卡塔 尔(阿拉伯语:قطر‎在概念完全体列之后钦点唯生机勃勃约束

语准绳则:constraint 约束名 unique(字段名卡塔尔

mysql> create table tb_dept3(id int(11)primary key,name varchar(22),location varchar(50),constraint sth unique(name));

unique和primary
key的分别:四个表中能够有多少个字段注明为unique,但一定要有三个primary
key申明;注明为primary
key的列不允许有空值,不过注明为unique的字段允许空值的留存。

 

字段

数码字段,正是多少表中的列。

每一个字段都供给钦命贰个称号,用来证实该列数据的作用,就叫作字段名。

is e;是

开发数据库

USE db_name

6.暗许约束:钦点某列的默许值。如男人同学非常多,性别就足以默以为“男”。借使插入一条新的记录时未有为这一个字段赋值,那么系统活动会为那几个字段赋值为男。

语准绳则:字段名 数据类型 default 默许值

例:mysql> create table tb_employee7(id int(11)primary key,name varchar(25)not null,deptld int(11)default 1111,salary float);

 

常用的数据库的门类

Mysql 品质大胆,能够防费应用。

MSSQL server 微软公司的数据库软件,平常用于搭配微软连串的编制程序语言。

Access是office的办公套件之风姿罗曼蒂克。

Oracel 品质非强悍,也超级高昂。

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

改善数据库的编码格局

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

7.安装数据表的属性值自动增添:在数据库应用中,平日希望在历次插入新数据时,系统会自动生成字段的主键值。可以为表主键增加auto_increment关键字来兑现。在mysql中,暗中同意情形下auto_increment开首值为1,每新扩展一条记下,字段自动加1.五个表只可以有叁个字段使用auto_increment限定,且各种字段必需为主键的风姿浪漫有个别。auto_increment节制的字段能够是任何整数类型(tinyint/samllint/int/bigint卡塔 尔(英语:State of Qatar)。

语法则则:字段名 数据类型 auto_increment

例:定义数据表tb_employee8,钦点工作者标号自动扩大

mysql> create table tb_employee8(id int(11)primary key auto_increment,name varchar(25)not null,deptld int(11),salary float);

 

mysql> insert into tb_employee8(name,salary) values('lucy',1000),('lii',800),('cai',20000);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from tb_employee8;
+----+------+--------+--------+
| id | name | deptld | salary |
+----+------+--------+--------+
|  1 | lucy |   NULL |   1000 |
|  2 | lii  |   NULL |    800 |
|  3 | cai  |   NULL |  20000 |
+----+------+--------+--------+
3 rows in set (0.00 sec)

 

安装与运用mysql

设置mysql的方式超级多,大家利用phpstudy这么些软件来设置php + mysql的周转条件。安装之后,大家就具有了mysql的服务。而且还会有四款mysql客商端。

 

Mysql分为客商端与服务端。服务端仅仅用于对软件程序提供数据通讯,普通客户不只怕间接看到里面的数据内容。

 

顾客端用来将服务端的数额,以顾客能够清楚的办法显示在其分界面上。

 

ip

数据表操作

8.查看数据表的构造

查看表基本协会:describe 表名 或 desc 表名

mysql> desc tb_employee8;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| id     | int(11)     | NO   | PRI | NULL    | auto_increment |
| name   | varchar(25) | NO   |     | NULL    |                |
| deptld | int(11)     | YES  |     | NULL    |                |
| salary | float       | YES  |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+

(1卡塔 尔(英语:State of Qatar)NULL:表示该列是或不是能够储存null值

(2卡塔尔国key:表示该列是或不是业已编制索引。pri为该列主键的意气风发有些;uni表示该列是unique索引的意气风发有的;mul表示在列中有些给定值允许现身屡次。

 

phpMyAdmin

phpMyAdmin是最常用的mysql顾客端,它是依靠php语言的。

在桌面右下角的phpstudyLogo上右击弹出菜单中采纳phpMyAdmin就足以运转步入了。运行现在,需求输入客户与密码实行登陆,暗中认可的客商名密码都以root。

 

本机ip;127.0.0.1

MYSQL中的数据类型

9.查看表详细结构

语法则则:show create table 表名\G

mysql> show create table tb_employee8\G
*************************** 1. row ***************************
       Table: tb_employee8
Create Table: CREATE TABLE `tb_employee8` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(25) NOT NULL,
  `deptld` int(11) DEFAULT NULL,
  `salary` float DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

 

新建数据库

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

10.修正数据表:改善数据库中风姿洒脱度存在的数据表结构。常用的改良表的操作有:纠正表名,改良字段数据类型或字段名,增删字段,改善字段的排列地方,改善表的仓库储存引擎,删除表的外键节制等。

(1卡塔尔国修正表名

alter table 旧表名 rename 新表名
例:mysql> alter table tb_dept3 rename tb_deptment3;

(2卡塔尔改善字段数据类型

alter table 表名 modify 字段名 数据类型
例:mysql> alter table tb_dept1 modify name varchar(30);

(3卡塔 尔(阿拉伯语:قطر‎加多字段

alter table 表名 add 新字段名 数据类型
例1:mysql> alter table tb_dept1 add managerld int(20);(没有完整性约束条件的字段)
例2:mysql> alter table tb_dept1 add column1 varchar(12) not null;(添加有约束条件)
例3:mysql> alter table tb_dept1 add column2 int(11) first;(添加到第一列)
例4:mysql> alter table tb_dept1 add column3 int(11) after name;(添加到name后一列)

(4卡塔尔国删除字段

alter table 表名 drop 字段名
例:mysql> alter table tb_dept1 drop column3;

(5卡塔尔国更正字段排序

alter table 表名 modify 字段1 数据类型 first after 字段2
例1:mysql> alter table tb_dept1 modify id int(11) first;
例2:mysql> alter table tb_dept1 modify column2 int(11) after column1;

(6卡塔 尔(阿拉伯语:قطر‎校正表的数额引擎

alter table 表名 engine=更改后的存储引擎
例:mysql> alter table tb_dept1 engine=innodb;

(7卡塔尔国删除表的外键节制

alter table 表名 drop foreign key 外键约束名

(8卡塔 尔(阿拉伯语:قطر‎改过字段名

mysql> alter table customers change c_contact c_phone varchar(50);

 

新建数据表

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

11.刨除数据表

drop table 表1 表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卡塔 尔(英语:State of Qatar);

日期时间项目

数据类型 存储范围 存储需求
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 (主键卡塔 尔(英语:State of Qatar)、pName(付加物名称卡塔尔国、pModel(成品型号卡塔 尔(英语:State of Qatar)、pPrice(产物价格卡塔 尔(英语:State of Qatar)

3、 增加5条付加物音讯

4、 在数据库中再加多多少个出品入库表(saveInLib卡塔尔国,并创立字段:sid(主键卡塔尔、pName(付加物名称卡塔 尔(阿拉伯语:قطر‎、saveInTime(入库时间卡塔尔、saveInCount(入库数量卡塔 尔(阿拉伯语:قطر‎。

5、 增加5条成品入库记录。

 

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

JSON类型(ver5.7新增)

mySQL中的数据类型

在mySQL中每一种字段,都必需分明它贮存的数码的项目,意气风发旦钦定了档案的次序,该字段(列卡塔 尔(英语:State of Qatar)中的数据都必需相符这几个类别的界定,不然就能孳生错误。

 

再者字符等等级次序要求钦定内容的最大尺寸。

 

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.22507385072016E-308,最大值:正负1.17976931348623157E+308。

 

Decimal
以字符串形式积攒浮点数。它的取值范围不是牢固的,决定于客户钦点的尺寸。

gbk;中日马耳他语言

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

  • InnoDB
  • MyISAM
  • Memory

数值类型的字段能够安装的参数:

gb1312;中文

封锁原则

一个表只好有一个主键(P奇骏IMATY KEY),然而能够有多个唯风姿浪漫(UNIQUE
KEY),唯生机勃勃的字段的值不容许现身重复,不过NULL值不算做重新的值

  • PRIMARY KEY 主键,P冠道IMA奥迪Q5Y可省略 (注意:P牧马人IMACR-VY KEY(a,b,c,…)
    来定义贰个主键时,由a,b,c,…全部的值手艺鲜明三个主键,即一个表满含a,b,c…等字段,个中单独的a,b,c字段相等,是足以的,但不能够一切等于,全体等于注脚主键相等,不可插入。卡塔 尔(英语:State of Qatar)
  • AUTO_INCREMENT 自增,须要和主键(P奥德赛IMA奥德赛Y
    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’,…),由顾客内定多个可选值,字段中的值必得是内部之黄金年代,最七只好有655三十七个可选值。

 

oracle,mysql,java都是oracle公司的

去除字段

ALTER TABLE tbl_name DROP 字段名称

若须要删除两个字段,须要三个DROP操作,以“,”号分隔。

注意:增添字段(ADD)与删除字段(DROP)能够在同八个话语里面(ALTETiggo 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卡塔 尔(英语:State of Qatar)、基本报酬(Float,默许:1300卡塔 尔(英语:State of Qatar)、自我说大话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(要依据顺序来填写主键值卡塔 尔(英语:State of Qatar)

 

二回性插入多条语句

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(主键卡塔 尔(英语:State of Qatar)、pName(成品名卡塔 尔(英语:State of Qatar)、pModel(型号卡塔 尔(阿拉伯语:قطر‎、pIntro(简单介绍卡塔尔国、pFrom(生产地)、pPrice(价格卡塔 尔(英语:State of Qatar) 。

3、 用insert语句增多10条分歧的制品数据

4、 查询

a) 查询全数产物数量

b) 查询全体付加物的产物名和价格

c) 查询全数价格在二零零一上述的产物

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

通过O奇骏DE奥迪Q5 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中与RESTEvoqueICT形似

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 总计个数

用以总括(按原则卡塔 尔(英语:State of Qatar)查询出聚合后的记录或询问的结果朝气蓬勃共有稍稍条。示例:

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('北京','西安','天津','山东')

 

探究地址是 东方之珠,Charlotte,圣Diego 或 江西的学习者消息

 

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同样可以变成上例中的成效,而且主表与附表、连接条件一望而知。INNEPAJERO 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

 

 

注意:省略INNEQX56直接写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)
  • 单列索引
  • 多列索引
  • 空中引得(数据类型为GEOMETEscortY,存款和储蓄引擎为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_意味着表名;字段
俄文 田野同志

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卡塔 尔(英语:State of Qatar)钦点的列非空的不能再一次

3,非空限定(not
null卡塔尔内定的列不可能为空;

4,内定数量(default卡塔尔国钦命的数目能够改造;

5,钦点有效数据(check(第贰个数据
or 第二个数据格式(健名=值卡塔尔)卡塔 尔(英语:State of Qatar)

不是第八个数据必需是第三个数据,不能够有第多少个数据出现

(在mysql中没用,帮衬创设但未有效用卡塔 尔(英语:State of Qatar)

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 字段 类型