- 一、入门简介
- 1、介绍
- 2、socket 介绍
- 二、SQL
- 1.SQL语句分类
- 2、DCL(数据控制语言)语法(了解即可)
- 2.1 创建用户
- 2.2 给用户授权
- 2.3 撤销授权
- 2.4 查看权限
- 2.5 删除用户
- 3、DDL(数据定义语言)语法(重要)
- 1、常用的数据类型
- 4、DML(数据操作语言)语法(重要)
- 4.1 插入数据(一次插入就是插入一行)
- 4.2 修改记录
- 4.4 删除数据(删除整行)
- 总结
一、入门简介 1、介绍
- MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言–结构化查询语言(SQL)进行数据库管理。
- MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。
- MySQL因为其速度、可靠性和适应性而备受关注。MySQL是管理内容最好的选择。
- 客户端和服务端是使用socket链接的。
- socket中文翻译是插座,但是学术叫套接字。其实就是计算机和计算机链接的方式。
- 一个计算机使用ip+端口使用某种协议就能和另外一台机子的ip+端口链接通信。(TCP / UDP)
- mysql使用的默认端口是3306,一个客户端随便使用一个端口,就能连接上服务。
- 服务器的ip+端口是固定的,客户端往往是随机的。
-
1.DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等。功能:创建、删除、修改库和表结构。
-
2.DML(Data Manipulation Language):数据操作语言,用来定义数据库记录:增、删、改表记录。
-
3.DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别。
-
4.DQL(Data Query Language):数据查询语言,用来查询记录。也是接下来学习的重点。
该语言用来定义访问权限,理解即可,以后不会多用。
需要记住的是,一个项目创建一个用户,一个项目对应的数据库只有一个。这个用户只能对这个数据库有权限,其它数据库该用户就操作不了。
2.1 创建用户用户只能在指定ip地址上登录mysql:create user 用户名@IP地址 identified by ‘密码’;
用户可以在任意ip地址上登录:create user 用户名@‘%’ identified by ‘密码’;
create user lzq@'%' identified by 'lzq123';2.2 给用户授权
语法:grant 权限1,…,权限n on 数据库.* to 用户名@IP地址;其中权限1、2、n可以直接用all关键字代替。权限例如:create,alter,drop,insert,update,delete,select。
grant all on test.* to lzq;2.3 撤销授权
语法:revoke 权限1,…,权限n on 数据库.* from 用户名@ ip地址;撤销指定用户在指定数据库上的指定权限。撤销例如:revoke create,delete on mydb1.* form user@localhost;表示的意思是撤消user用户在数据库mydb1伤的create、alter权限。
revoke all on test.* from lzq;2.4 查看权限
查看指定用户的权限:show grants for 用户名@ip地址;
show grants for lzq;2.5 删除用户
drop user 用户名@ip地址;3、DDL(数据定义语言)语法(重要)
该语言用来对数据库和表结构进行操作。
1、常用的数据类型日期和时间数据类型
| MySQL数据类型 | 含义 |
|---|---|
| date | 3字节,日期,格式:2014-09-18 |
| time | 3字节,时间,格式:08:42:30 |
| datetime | 8字节,日期时间,格式:2014-09-18 08:42:30 |
| timestamp | 4字节,自动存储记录修改的时间 |
| year | 1字节,年份 |
整型
| MySQL数据类型 | 含义(有符号) |
|---|---|
| tinyint | 1字节,范围(-128~127) |
| smallint | 2字节,范围(-32768~32767) |
| mediumint | 3字节,范围(-8388608~8388607) |
| int | 4字节,范围(-2147483648~2147483647) |
| bigint | 8字节,范围(±9.22*10的18次方) |
上面定义的都是有符号的,当然了,也可以加上unsigned关键字,定义成无符号的类型,那么对应的取值范围就要翻翻了,比如:
tinyint unsigned的取值范围为0~255。
浮点型
| MySQL数据类型 | 含义 |
|---|---|
| float(m, d) | 4字节,单精度浮点型,m总个数,d小数位 |
| double(m, d) | 8字节,双精度浮点型,m总个数,d小数位 |
| decimal(m, d) | decimal是存储为字符串的浮点数 |
我在MySQL中建立了一个表,有一列为float(5, 3);做了以下试验:
1.插入123.45678,最后查询得到的结果为99.999;
2.插入123.456,最后查询结果为99.999;
3.插入12.34567,最后查询结果为12.346;
所以,在使用浮点型的时候,还是要注意陷阱的,要以插入数据库中的实际结果为准。
字符串数据类型
| MySQL数据类型 | 含义 |
|---|---|
| char(n) | 固定长度,最多255个字符 |
| varchar(n) | 可变长度,最多65535个字符 |
| tinytext | 可变长度,最多255个字符 |
| text | 可变长度,最多65535个字符 |
| mediumtext | 可变长度,最多2的24次方-1个字符 |
| longtext | 可变长度,最多2的32次方-1个字符 |
- char(n)和varchar(n)中括号中n代表字符的个数,并不代表字节个数,所以当使用了中文的时候(UTF8)意味着可以插入m个中文,但是实际会占用m*3个字节。
- 同时char和varchar最大的区别就在于char不管实际value都会占用n个字符的空间,而varchar只会占用实际字符应该占用的空间+1,并且实际空间+1<=n。
- 超过char和varchar的n设置后,字符串会被截断。
- char的上限为255字节,varchar的上限65535字节,text的上限为65535。
- char在存储的时候会截断尾部的空格,varchar和text不会。
- varchar会使用1-3个字节来存储长度,text不会。
其它类型
-
enum(“member1″, “member2″, … “member65535″)
enum 数据类型就是定义了一种枚举,最多包含65535个不同的成员。当定义了一个enum的列时,该列的值限制为列定义中声明的值。如果列声明包含NULL属性,则NULL将被认为是一个有效值,并且是默认值。如果声明了NOT NULL,则列表的第一个成员是默认值。 -
set(“member”, “member2″, … “member64″)
set 数据类型为指定一组预定义值中的零个或多个值提供了一种方法,这组值最多包括64个成员。值的选择限制为列定义中声明的值。
对数据库的操作(增删查改):
查看所有数据库: SHOW DATAbaseS;
使用数据库: USE 数据库名;
创建数据库并指定编码,如不指定编码可能会有乱码问题,比如汉字不能存,当然建表指定也行,但是建库时指定一劳永逸:
CREATE DATAbase test DEFAULT CHARACTER SET utf8
删除数据库: DROP DATAbase 数据库名;
切换数据库: use test;
对表结构的操作
创建表:
create table 表名 (
字段名1 类型 (宽度) 约束条件,
字段名2 类型(宽度) 约束条件,
字段名3 类型(宽度) 约束条件,
.......
);
CREATE TABLE student (
id INT(10) primary key,
name VARCHAR (10),
age INT (10) NOT NULL,
gander varchar(2)
);
CREATE TABLE course (
id INT (10) primary key,
name VARCHAR (10) ,
t_id INT (10)
) ;
CREATE TABLE `teacher` (
id INT (10) primary key,
name VARCHAR (10)
);
CREATE TABLE `scores` (
s_id INT primary key,
score INT (10),
c_id INT (10)
) ;
查看当前数据库中所有表: SHOW TABLES;
查看表结构: DESC 表名;
或者:describe create table 表名
删除表: DROP table 表名;
修改表有5个操作,但前缀都是一样的:ALTER TABLE 表名...(不重要)
-
修改表之添加列: ALTER TABLE 表名 add (列名 列类型,...,列名 列类型);
ALTER TABLE student add (address VARCHAR(20),hobby VARCHAR(20))
-
修改表之修改列类型: ALTER TABLE 表名 MODIFY 列名 列的新类型;
ALTER TABLE student MODIFY hobby int;
-
修改表之列名称列类型一起修改: ALTER TABLE 表名 CHANGE 原列名 新列名 列名类型;
ALTER TABLE student CHANGE hobby newHobby VARCHAR(15);
-
修改表之删除列: ALTER TABLE 表名 DROP 列名;
ALTER TABLE student drop newHobby;
-
修改表之修改表名: ALTER TABLE 表名 RENAME TO 新表名
ALTER TABLE student RENAME to stu;
该语言用来对表记录操作(增、删、改)。
4.1 插入数据(一次插入就是插入一行)insert into 表名 (列名1,列名2,列名3) values (列值1,列值2,列值3); insert into stu (id,name,age,gander) values (2,'李华',19,'男');
4.2 修改记录说明:
- 在数据库中所有的字符串类型,必须使用单引号。
- (列名1,列名2,列名3)可省略,表示按照表中的顺序插入。但不建议采取这种写法,因为降低了程序的可读性。
修改某列的全部值:
update 表名 set 列名1=列值1(,列名2=列值2);
UPDATE stu set age=22; UPDATE stu set age=23,name='张楠';
这样就全修改了,所以往往就要加条件。
UPDATE stu set age=23,name='张楠' where id = 1;
修改(某行或者多行记录的)列的指定值:
update 表名 set 列名1=列值1 where 列名2=列值2 or 列名3=列值3;
运算符:=、!=、<>、<、>、>=、<=、between...and、in(…)、is null、not、or、and,其中in(…)的用法表示集合。
例如:update 表名 set 列名1=列值1 where 列名2=列值2 or 列名2=列值22
用in(…)写成update 表名 set 列名1=列值1 where 列名2 in(列值2,列值3)
delete from 表名 (where 条件);
不加where条件时会删除表中所有的记录,所以为了防止这种失误操作,很多数据库往往都会有备份。
总结 以上就是今天要讲的内容,本文仅仅简单介绍了p数据库的简单了解和使用,而数据库提供了大量能使我们快速便捷地处理数据的函数和方法,后期会跟进



