MySQL入门

文章目录


一、安装

安装分两种方式:推荐第一种

安装方式环境变量和配置文件
Installer.exe安装自动配置,无需手动
ZIP安装需要自己配置环境变量和配置文件

https://www.cnblogs.com/ayyl/p/5978418.html

二、MySQL语法总结

换行只要不加分号,就相当于接着上一行写。
和C语言的语法一样,语句的结尾要加上分号。
大小写不区分,如输入的库名bank和Bank其实都是同一个。

三、MySQL命令

1.库database

命令作用
create database <库名>;创建一个库
drop database <库名>;删除某个库
show databases;显示所有库
use <库名>;使用指定库
PS:使用该命令后所有Mysql命令都只针对该数据库。

(1)create database <库名>;

mysql> create database student;
Query OK, 1 row affected (0.01 sec)

(2)drop database <库名>;

mysql> drop database student;
Query OK, 0 rows affected (0.02 sec)

(3)show databases;

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| world              |
+--------------------+
7 rows in set (0.00 sec)

(4)use database_name:

mysql> use world;
Database changed

2.数据表table

PS:使用该命令前需要使用 use 命令来选择要操作的数据库

命令作用
show tables显示指定数据库的所有表
(包括view视图
desc <表名>显示表的各列的属性
create table <表名> (<列名> <列名类型>);在某个表内创建内容
drop table <表名>删除某个表
select <列名> from <表名>;显示表的数据
insert into <表名> (<列名>) values (<对应列名数值>);输入表的数据
update <表名> set <列名> = <新值> WHERE <列名> = <某值>更新表中的数据
alter table <表名> drop <列名>删除表的某个属性
alter table <表名> add <列名> <类型>添加表的某个属性
alter table <表名> modify <列名> <新的类型>修改表中某个列的类型
alter table <表名> change <旧列名> <新列名> <新的类型>修改表中某个列的名字和类型
alter table <表名> alter <列名> set default <值>修改某个列的默认值
alter table <表名> alter <列名> drop default <值>删除某个列的默认值
delete from <表名> where <谓词语句>删除表中特定的行

(0)前提准备

mysql> create database student;
Query OK, 1 row affected (0.06 sec)

mysql> use student;
Database changed

(1)show tables;

不仅会列出table表,也会列出view视图。

mysql> show tables;
+-------------------+
| Tables_in_student |
+-------------------+
| person            |
+-------------------+
1 row in set (0.00 sec)

(2)desc <表名>

desc account;

在这里插入图片描述

(3) create table <表名> (<列名> <列名类型>);

mysql> create table person(
    -> name char(10),
    -> id decimal(4)
    -> );
Query OK, 0 rows affected (0.07 sec)

(4)drop table <表名>

drop table account;

(5)select <列名> from <表名>;

前提:现在有一个表person

+------+------+
| name | id   |
+------+------+
| Jack | NULL |
| Sam  |    1 |
+------+------+

选择特定的列

select f1,f2,...,fN from <表名>;
mysql> select name from person;
+------+
| name |
+------+
| Jack |
| Sam  |
+------+
2 rows in set (0.00 sec)

选择所有的列

select * from <表名>
mysql> select *from person;
+------+------+
| name | id   |
+------+------+
| Jack | NULL |
| Sam  |    1 |
+------+------+
2 rows in set (0.00 sec)

(6) insert into <表名> (<列名>) values (<对应列名数值>);

选择特定列插入:

insert into <表名> (f1, f2,...,fi)  values (v1,v2,...,vi);
mysql> insert into person(name) values('Jack');
Query OK, 1 row affected (0.05 sec)

mysql> select * from person;
+------+------+
| name | id   |
+------+------+
| Jack | NULL |
+------+------+
1 row in set (0.00 sec)

不选择列名则代表选择所有的列名:

insert into <表名> values (v1,v2,...,vN);
mysql> select * from person;
+------+------+
| name | id   |
+------+------+
| Jack | NULL |
+------+------+
1 row in set (0.00 sec)

mysql> insert into person values('Sam',0001);
Query OK, 1 row affected (0.01 sec)

mysql> select * from person;
+------+------+
| name | id   |
+------+------+
| Jack | NULL |
| Sam  |    1 |
+------+------+
2 rows in set (0.00 sec)

插入多条数据:

insert into <表名>  (f1, f2,...,fi)  values (vA1,vA2,...,vAi),(vB1,vB2,...,vBi),......,(vC1,vC2,...,vCi);
insert into <表名>  values (vA1,vA2,...,vAN),(vB1,vB2,...,vBN),......,(vC1,vC2,...,vCN);
mysql> insert into person values ('Tim',123),('Back',666);
Query OK, 2 rows affected (0.06 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from person;
+------+------+
| name | id   |
+------+------+
| Jack | NULL |
| Sam  |    1 |
| Tim  |  123 |
| Back |  666 |
+------+------+
4 rows in set (0.00 sec)

可以直接从别的表中选择数据插入

格式:insert into <表名> <查询结果>

insert into account
 	select loan_number, branch_name,  200
 	from loan
 	where branch_name = 'Perryridge';

(5)update <表名> set <列名> = <新值> WHERE <列名> = <某值>

(6)alter table <表名> drop <列名>

alter table loan drop loan_number;

(7)alter table <表名> add <列名> <类型>

默认添加到最后一列处

alter table loan add loan_number char(30);

指定插到第一列

alter table loan add loan_number char(30) FIRST;

指定插到某一列后

alter table loan add loan_number char(30) after branch_name;

(8)alter table <表名> modify <列名> <新的类型>

修改类型

alter table loan modify loan_number char(20);

修改类型同时设置属性

alter table loan modify loan_number char(20) not null;
alter table loan modify loan_number char(20) default 100;

(9)alter table <表名> change <旧列名> <新列名> <新的类型>

不能只修改列名

alter table loan change loan_number myloan_number char(30);

(10)alter table <表名> alter <列名> set default <值>

设置默认值

alter table loan alter loan_number set default 100;

PS:也可以通过修改类型的同时修改:aler table loan modify loan_number char(20) default 100;

(11)alter table <表名> alter <列名> drop default

删除默认值

alter table loan alter loan_number drop default;

(11)alter table <旧表名> rename <新表名>

alter table loan alter loan_number rename myloan;

(12)delete from <表名> where <谓词语句>

delete from account
where branch_name = 'Perryridge'

2.视图view

命令作用
create view <视图名> (列名) as <查询语句>创建视图
select <列名> from <视图>查询视图
drop view <视图名>删除视图

(1)create view <视图名> (列名) as <查询语句>

①格式1:create view <视图名> as <查询语句>

视图的列名没有被指定,那么它就从select 后的列名继承而来,即相同列名。

A view consisting of branches and their customers

CREATE VIEW all_customer AS
(SELECT branch_name, customer_name
FROM depositor, account
WHERE depositor.account_number = account.account_number )
UNION
(SELECT branch_name, customer_name
FROM borrower, loan
WHERE borrower.loan_number = loan.loan_number);

在这里插入图片描述

②格式2:create view <视图名> (列名) as <查询语句>
CREATE VIEW all_customer(bname,cname) AS
(SELECT branch_name, customer_name
FROM depositor, account
WHERE depositor.account_number = account.account_number )
UNION
(SELECT branch_name, customer_name
FROM borrower, loan
WHERE borrower.loan_number = loan.loan_number);

在这里插入图片描述

(2)像table一样使用查询

Find all customers of the Perryridge branch

SELECT customer_name
FROM all_customer
WHERE branch_name = 'Perryridge';

(3)drop view <视图名>

drop view all_customer;

3.权限

(1)grant赋予权限

①格式1:grant <privilege list> on <表名或视图名> to <user list>

权限:

  • select: allows read access to relation,or the ability to query using the view
  • insert: the ability to insert tuples
  • update: the ability to update using the SQL update statement
  • delete: the ability to delete tuples.
  • all privileges: used as a short form for all the allowable privileges

Example: grant users U1, U2, and U3 select authorization on the branch relation:

grant select on branch to U1, U2, U3
②格式2:grant <privilege list> (列名) on <表名或视图名> to <user list>

To give database user ‘Zhang’ the privilege of modifying balance on table account,

GRANT UPDATE(balance) ON account TO Zhang;

(2)revoke撤销权限

格式:revoke <privilege list> on <表名或视图名> from <user list>

Example

revoke select on branch from U1, U2, U3

PS:If the same privilege was granted twice to the same user by different grantees, the user may retain the privilege after the revocation.

三、数据类型

1.整型(int)

MySQL数据类型字节范围(有符号)
tinyint(m)1个字节(-128~127)
smallint(m)2个字节(-32768~32767)
mediumint(m)3个字节(-8388608~8388607)
int(m)4个字节(-2147483648~2147483647)
bigint(m)8个字节(±9.22*10的18次方)

取值范围如果加了 unsigned,则最大值翻倍,如 tinyint unsigned 的取值范围为(0~255)。

int(m) 里的 m 是表示 SELECT 查询结果集中的显示宽度和实际的取值范围无关

2.浮点型(float 和 double)

MySQL字节含义
float(m,d)单精度浮点型8位精度(4字节)
double(m,d)双精度浮点型16位精度(8字节)

设一个字段定义为 float(5,3),如果插入一个数 123.45678,实际数据库里存的是 123.457,但总个数还以实际为准,即 6 位。

3.定点数(decimal)

浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。

decimal(m,d) 

参数 :
m:总位数(小数点左侧和右侧),默认是 18,m<65
d :小数点右侧存储的最大位数 ,默认是 0,d<30并且d<m

4.字符串(char,varchar)

MySQL数据类型长度字符
char(n)固定长度最多255个字符
varchar(n)可变长度最多255个字符
tinytext可变长度最多255个字符
text可变长度最多65535个字符
mediumtext可变长度最多2的24次方-1个字符
longtext可变长度最多2的32次方-1个字符
ENUM(x,y,z,etc.)允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。注释:这些值是按照你输入的顺序存储的。可以按照此格式输入可能的值:ENUM(‘X’,‘Y’,‘Z’)
SET与 ENUM 类似,SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值。

char 和 varchar:

1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以 char 类型存储的字符串末尾不能有空格,varchar 不限于此。
2.char(n) 固定长度,char(4) 不管是存入几个字符,都将占用 4 个字节,varchar 是存入的实际字符数 +1 个字节(n<=255)或2个字节(n>255),所以 varchar(4),存入 3 个字符将占用 4 个字节。
3.char 类型的字符串检索速度要比 varchar 类型的快。

varchar 和 text:

1.varchar 可指定 n,text 不能指定,内部存储 varchar 是存入的实际字符数 +1 个字节(n<=255)或 2 个字节(n>255),text 是实际字符数 +2 个字节。
2.text 类型不能有默认值。
3.varchar 可直接创建索引,text 创建索引要指定前多少个字符。varchar 查询速度快于 text, 在都创建索引的情况下,text 的索引似乎不起作用。

5.二进制数据(_Blob)

1._BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。
2._BLOB存储的数据只能整体读出。
3._TEXT可以指定字符集,_BLO不用指定字符集。

6.日期时间类型

MySQL数据类型含义
date日期 ‘2008-12-2’
time时间 ‘12:25:36’
datetime日期时间 ‘2008-12-2 22:06:44’
timestamp自动存储记录修改时间

若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。

7.数据类型的属性

(1)关键字

MySQL关键字含义
NULL数据列可包含NULL值
NOT NULL数据列不允许包含NULL值
DEFAULT默认值
PRIMARY KEY主键
FOREIGN KEY外键
AUTO_INCREMENT自动递增,适用于整数类型
UNSIGNED无符号
CHARACTER SET name指定一个字符

(2)PRIMARY KEY主键

PRIMARY KEY含义

PRIMARY KEY 约束唯一标识数据库表中的每条记录。

主键必须包含唯一的值。(有重复的值的列不能当作主键)

主键列不能包含 NULL 值。(现版本声明为主键自动声明为Not Null)

每个表都应该有一个主键,但可以有多个。

理解:主键是这个表特有的数据,表明这个表的独特之处。如果一个表要有两个主键,才能满足其他的表的外键需求,那么证明需要拆分这个表来达到更好的设计。

表创建时在 “Id_P” 列创建 PRIMARY KEY :

格式:primary key(<列名>)

create table branch(
branch_name varchar(30) NOT NULL,
branch_city varchar(30),
assets decimal(12),
primary key(branch_name)
);

(3)FOREIGN KEY外键

格式:foreign key(<列名>) references <表名>(<列名>)
注意:references

一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。

CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
)

(4)CHECK

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值