您的位置:首页 > 数据库 > MySQL

数据库基本概念&MySQL基本操作详解

2017-09-06 20:03 537 查看
本人小白,大部份内容来自于网络或书本,再加一点自己的见解总结,在此向各位巨人致敬

数据

数据的定义:

1. 数据是对客观事实的符号表示

2. 在计算机领域数据通常是指由能被计算机识别与处理的数值、字符等符号构成的集合

数据库管理系统(DBMS)的分类

关系型数据库:支持关系模型,其关系模型由关系数据结构、关系操作集合、完整性约束三部分组成。常见的有oracle,mysql,SQLserver等

非关系型数据库:常见的有redis,MongoDB等

两者的区别:

关系型数据的运算

笛卡尔积:笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员



选择(where):选择是对关系的水平分解运算,通俗一点就是提取行

σf(R)={t|t∈R∧F(t)=TRUE}

解释:选择t,t属于R且F(t)为真。(即在R中选取满足f条件的元组)

select * from R where f(t)==true;

投影(select):投影是对关系的垂直分解运算,即选择关系集中的属性子集,通俗一点就是提取列。

πA(R) = { t[A] | t∈R }

select A from R

连接:连接也称为θ连接,它是从两个关系的笛卡儿积中选取属性间满足一定条件的元组。

等值连接和自然连接(元组行参照坐标)

等值连接:广义上它是从笛卡尔集中选取R1中某指定列和R2中某指定列相等的元组。

select * from R1,R2 where R1.A=R2.B;

自然连接:特殊的等值连接,要求用于连接的属性相同。

select * from R1,R2 where R1.A=R2.A;

外链接

-

数据库的组成

数据库系统

数据库

数据表

数据表字段

数据

mysql安装

参见,免安装版MySQL相关配置

SQL(结构化查询语言)

SQL分类:DDL数据定义语言,DML数据操作语言,DQL数据查询语言,DCL数据控制语言

DDL数据定义语言:用来操作数据库和数据库对象

1. show databases; :查看数据库系统里的所在数据库

2. create database 数据库名; :建立一个数据库

3. use 数据库名; :使用一个数据库

4. show tables; :查看数据库里面的所有数据表

5. create table 表名(字段 字段类型,。。。) :创建表

6. drop database 数据库名;:删除数据库

7. drop table 表名; :删除数据库表

8. desc 表名;:查看表结构字段

9. alter table 表名 modify 字段名 字段类型;: 修改表字段类型

10. alter table 表名 change 原字段名 修改字段名 字段类型;:修改表字段

11. alter table 表名 add 字段名 类型 after 字段;:添加字段到自定字段后

12. alter table 表名 rename 新表名; :修改表名


DML数据操作语言:用来修改表中的数据

1. insert into 表名 values(对应值),(值);:插入一条或多条数据

2. insert into 表名(字段1,字段2,。。。)values(值1,值2,。。。);:插入指定字段数据到表中

3. delete from 表名 where 字段=值;:从表中删除一条数据

4. update 表名 set 字段1=值1,字段2=值2,。。。where 字段=值;:修改


DQL数据查询语言

1. select * from 表名;:查询表里所有数据

2. select 字段1,字段2,。。。 from 表名; :查询指定字段

3. where条件查询:
1. 关系型查询:<> <= >= !=
2. 逻辑 :or and
3. 区间: in() ,between a and b
4. 模糊: like '%条件%';

4. 规则:
1. group by 字段
2. order by 字段  ASC:升序(默认),DESC:降序。
3. limit 0,5


DCL数据控制语句:用来定义访问权限和安全级别

1. 创建用户:create user '用户名'@'主机名' identified by '密码';

2.  授权:grant all on 数据名.表名 to '用户名'@'主机名';

3. 取消权限:revoke all on *.* from '用户名'@'主机名';

4. 删除用户:drop user '用户名'@'主机名';

5. 查看用户的权限:show grants [for '用户名'@'主机名']
*注:如果for后面的内容不写,默认查看当前用户,写的话查看指定用户的权限

> 说明:
all:所有的权限
*:代表所有的库或表
%:模糊查询


TCL事务控制语句:用于维护数据的一致性

1. set autocommit=0;/begin;     开启事务
2. rollback;          回滚
3. commit;       手动提交事务


数据类型

number类型:

类型字节数范围(有符号)无符号描述
TINYINT1 字节(-128,127)(0,255)小整数值
SMALLINT2 字节(-32 768,32 767)(0,65 535)大整数值
MEDIUMINT3 字节(-8 388 608,8 388 607)(0,16 777 215)大整数值
INT或INTEGER4 字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
BIGINT8 字节(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值
FLOAT4 字节(-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)单精度浮点数值
DOUBLE8 字节(-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的值小数值
字符型:

类型大小描述
CHAR0-255字节定长字符串
VARCHAR0-65535 字节变长字符串
TINYBLOB0-255字节不超过 255 个字符的二进制字符串
TINYTEXT0-255字节短文本字符串
BLOB0-65 535字节二进制形式的长文本数据
TEXT0-65 535字节长文本数据
MEDIUMBLOB0-16 777 215字节二进制形式的中等长度文本数据
MEDIUMTEXT0-16 777 215字节中等长度文本数据
LONGBLOB0-4 294 967 295字节二进制形式的极大文本数据
LONGTEXT0-4 294 967 295字节极大文本数据
DATA类型:

类型大小范围格式描述
DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3‘-838:59:59’/’838:59:59’HH:MM:SS时间值或持续时间
YEAR11901/2155YYYY年份值
DATETIME81000-01-01 00:00:00/9999-12-3123:59:59YYYY-MM-DD HH:MM:SS
TIMESTAMP41970-01-01 00:00:00/2037年某时 YYYYMMDD HHMMSS混合日期和时间值,时间戳

约束条件&关键字

名称描述
PRIMARY KEY(主键)
NOT NULL(非空)
AUTO_INCREMENT(自增长)
UNIQUE(值唯一)
FOREING KEY(外键)
DEFAULT(默认值)
zerofill使用0去填充(如int(4),1的表示0001)
unsigned无符号(限定大于零)
comment解释说明(类似于注释)
案例:

CREATE TABLE yuesu(
id int(4) PRIMARY KEY AUTO_INCREMENT,#主键约束,设置自增
name VARCHAR(8) NOT NULL,#不为空
shoolId int(4) UNIQUE ,#设置唯一约束
bronData DATE DEFAULT '1990-01-01',#设置默认值
card INT(11),
CONSTRAINT key_1 FOREIGN KEY (card) REFERENCES te(id)#设置外键约束
)ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1000;#设置引擎,默认字符集,还可以给自增赋初始值


搜索引擎

InnoDB:支持事务,采用的是行锁,对于数据的增删改操作效率高,包括了对事务处理和外来键的支持

MyISAM:不支持事务,采用的是表锁,对于数据的查询效率高,常用于查询操作比较多的web项目

两者的区别:

MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,常被认为用于小型项目

InnoDB提供事务支持事务,外部键等高级数据库功能

对引擎的操作:

show engines; 查看数据库系统支持的存储引擎

show variables like ‘storage_engine%’; 查看当前系统默认的存储引擎

修改默认引擎-my.ini

设置表引擎参看上一案例

函数

数学函数:

函数描述
ABS(x)返回x的绝对值
BIN(x)返回x的二进制(OCT返回八进制,HEX返回十六进制)
CEILING(x)返回大于x的最小整数值
EXP(x)返回值e(自然对数的底)的x次方
FLOOR(x)返回小于x的最大整数值
GREATEST(x1,x2,…,xn)返回集合中最大的值
LEAST(x1,x2,…,xn)返回集合中最小的值
LN(x)返回x的自然对数
LOG(x,y)返回x的以y为底的对数
MOD(x,y)返回x/y的模(余数)
PI()返回pi的值(圆周率)
RAND()返回0到1内的随机值,可以通过提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。
ROUND(x,y)返回参数x的四舍五入的有y位小数的值
SIGN(x)返回代表数字x的符号的值
SQRT(x)返回一个数的平方根
TRUNCATE(x,y)返回数字x截短为y位小数的结果

聚合函数(常用于统计一个列,常通过group by)

函数名描述
AVG(col)返回指定列的平均值
COUNT(col)返回指定列中非NULL值的个数
MIN(col)返回指定列的最小值
MAX(col)返回指定列的最大值
SUM(col)返回指定列的所有值之和
GROUP_CONCAT(col)返回由属于一组的列值连接组合而成的结果

字符串函数

函数名描述
ASCII(char)返回字符的ASCII码值
BIT_LENGTH(str)返回字符串的比特长度
CONCAT(s1,s2…,sn)将s1,s2…,sn连接成字符串
CONCAT_WS(sep,s1,s2…,sn)将s1,s2…,sn连接成字符串,并用sep字符间隔
INSERT(str,x,y,instr)将字符串str从第x位置开始,y个字符长的子串替换为字符串instr,返回结果
FIND_IN_SET(str,list)分析逗号分隔的list列表,如果发现str,返回str在list中的位置
LCASE(str)或LOWER(str)返回将字符串str中所有字符改变为小写后的结果
LEFT(str,x)返回字符串str中最左边的x个字符
LENGTH(s)返回字符串str中的字符数
LTRIM(str)从字符串str中切掉开头的空格
POSITION(substr,str)返回子串substr在字符串str中第一次出现的位置
QUOTE(str)用反斜杠转义str中的单引号
REPEAT(str,srchstr,rplcstr)返回字符串str重复x次的结果
REVERSE(str)返回颠倒字符串str的结果
RIGHT(str,x)返回字符串str中最右边的x个字符
RTRIM(str)返回字符串str尾部的空格
STRCMP(s1,s2)比较字符串s1和s2
TRIM(str)去除字符串首部和尾部的所有空格
UCASE(str)或UPPER(str)返回将字符串str中所有字符转变为大写后的结果

DATA函数

函数名描述
CURDATE()或CURRENT_DATE()返回当前的日期
CURTIME()或CURRENT_TIME()返回当前的时间
DATE_ADD(date,INTERVAL int keyword)返回日期date加上间隔时间int的结果(int必须按照关键字进行格式化),如:SELECTDATE_ADD(CURRENT_DATE,INTERVAL 6 MONTH);
DATE_FORMAT(date,fmt)依照指定的fmt格式格式化日期date值
DATE_SUB(date,INTERVAL int keyword)返回日期date加上间隔时间int的结果(int必须按照关键字进行格式化),如:SELECTDATE_SUB(CURRENT_DATE,INTERVAL 6 MONTH);
DAYOFWEEK(date)返回date所代表的一星期中的第几天(1~7)
DAYOFMONTH(date)返回date是一个月的第几天(1~31)
DAYOFYEAR(date)返回date是一年的第几天(1~366)
DAYNAME(date)返回date的星期名,如:SELECT DAYNAME(CURRENT_DATE);
FROM_UNIXTIME(ts,fmt)根据指定的fmt格式,格式化UNIX时间戳ts
HOUR(time)返回time的小时值(0~23)
MINUTE(time)返回time的分钟值(0~59)
MONTH(date)返回date的月份值(1~12)
MONTHNAME(date)返回date的月份名,如:SELECT MONTHNAME(CURRENT_DATE);
NOW()返回当前的日期和时间
QUARTER(date)返回date在一年中的季度(1~4),如SELECT QUARTER(CURRENT_DATE);
WEEK(date)返回日期date为一年中第几周(0~53)
YEAR(date)返回日期date的年份(1000~9999)

加密函数

函数名描述
AES_ENCRYPT(str,key)返回用密钥key对字符串str利用高级加密标准算法加密后的结果,调用AES_ENCRYPT的结果是一个二进制字符串,以BLOB类型存储
AES_DECRYPT(str,key)返回用密钥key对字符串str利用高级加密标准算法解密后的结果
DECODE(str,key)使用key作为密钥解密加密字符串str
ENCRYPT(str,salt)使用UNIXcrypt()函数,用关键词salt(一个可以惟一确定口令的字符串,就像钥匙一样)加密字符串str
ENCODE(str,key)使用key作为密钥加密字符串str,调用ENCODE()的结果是一个二进制字符串,它以BLOB类型存储
MD5()计算字符串str的MD5校验和
PASSWORD(str)返回字符串str的加密版本,这个加密过程是不可逆转的,和UNIX密码加密过程使用不同的算法。
SHA()计算字符串str的安全散列算法(SHA)校验和

数据库导入和导出

导出数据

// 导出test 数据库 -R 表示导出函数和存储过程,加上使导出更完整
mysqldump -u root -p -R test > test.sql

// 导出test数据库中user表
mysqldump -u root -p test user > test_user.sql


导入数据

方法1:
mysql -u root -p
mysql>use test
mysql>source test.sql

方法2:
mysql -u root -p test < test.sql


Navicat 激活码

NAVH-WK6A-DMVK-DKW3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: