构建Mysql三部曲之二 概念语法

一、基本概念

SQL(Structured Query Language) 结构化查询语言

SQL 语言包含4个部分:

1.数据定义语言(DDL),例如:CREATE、DROP、ALTER 等语句

2.数据操作语言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句

3.数据查询语言(DQL),例如:SELECT 语句

4.数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK 等语句

MySQL 支持标准的 SQL 语句,也有自己私有的SQL语句。

SQL 数据基本操作分为为创建(create)、更新(update)、读取(read)和删除(delete),即 CURD ,以及在此基础上的更为复杂的一些数据操作。

create:分为 create 和 insert into ,用于创建数据库(表)以及向表里添加数据记录

update:更新数据库(表)信息以及更新表内的具体数据信息记录

read:读取数据库(表)信息以及表内的具体数据信息记录

delete:删除数据库(表)信息以及表内的具体数据信息记录

Mysql只是一种管理数据库的小型管理系统(DBMS),并不是数据库数据本身。

数据库是一个保存有组织的数据的容器,使用DBMS访问数据库。

表是某中特定类型数据的结构化清单。

模式是关于数据库和表的布局及特性信息。

列是表中的一个字段,所有的表都是由一个或多个列组成。

数据类型是所允许存储数据的类型,每个表列都有相应的数据类型,它限制该列中存储的数据。

行是表中的一个记录。

主键是一列或一组列,其值能够唯一区分表中的每个行。

注意事项

  1. 在处理SQL语句时,其中所有的空格都会被忽略。
  2. mysql语句之后用”;”或”\g”结束,enter不执行命令。
  3. 数据库名不能是纯数字。

MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:

1、数据库名与表名是严格区分大小写的;

2、表的别名是严格区分大小写的;

3、列名与列的别名在所有的情况下均是忽略大小写的;

4、变量名也是严格区分大小写的;

二、Mysql数据(字段)类型

在创建表的时候,要明确定义字段对应的数据类型。MySQL 主要的数据类型分为数值类型、字符串(文本)类型、时间日期类型和其他类型几类。

数值类型

数值类型说明:

补充说明

1.在 int(integer)系列中,只能存储整型值,且可以在后面用括号指定显示的尺寸(M),如果不指定则会默认分配。如果实际值的显示宽度大于设定值,将会显示实际值而不会截断以适应显示尺寸。如 smallint(3)中的 3 即为显示尺寸,即显示三位的数值(不包括 - 号)

2.int 类型可以指定 UNSIGNED 属性,即无符号(非负),所以存储范围有两种

3.在 float、double 及 decimal 类型中,不能指定UNSIGNED 属性,其显示尺寸包含了小数点精度(D),即 float(3,1) 保存范围为 -99.9 至 99.9

4.decimal 必须指定显示尺寸(M)和小数点精度(D),float 和 double 都是可选的

5.在可能涵盖取值范围的基础上,尽可能选择较小的类型以提高效率和节约存储空间,如年龄,就选择 tinyint(3) 。该原则对于字符类型同样适用。

字符串(文本)类型

字符串(文本)类型说明:

补充说明

char 和 varcha 需要指定长度,不同的是,char存储时总是按照指定的长度储存,而 varchar 则根据实际字符串长度再加上一个字节分配空间。

时间日期类型

时间日期类型说明:

补充说明

在 PHP 中,一般情况下对于时间都是按照 UNIX 时间戳以 int 类型存储于表中,再根据实际需要用 PHP 的时间函数进行处理,但不完全都是这样

三、基本语法

系统管理

连接MySQL

格式: mysql -h 主机地址 -u用户名 -p用户密码

mysql默认没有密码,直接mysql默认以root(和系统的root没关系)身份链接本地的mysql服务

例 1:连接到本机上的 MySQL。

[[email protected] ~]# mysql -uroot -pmima

例 2:连接到远程主机上的 MYSQL。

[[email protected] ~]# mysql -uroot -h192.168.1.2-phello

修改新密码

在终端输入:mysql -u用户名 -p密码,回车进入Mysql。

> use mysql;

> update user setpassword=PASSWORD(‘新密码‘) where user=‘用户名‘;

> flush privileges;#更新权限

> quit; #退出

增加新用户

格式:grant select on 数据库.* to 用户名@登录主机 identified by ‘密码‘

例 :增加一个用户jacken密码为 123,让他可以在任何主机上登录,并对所有数据库有

查询、插入、修改、删除的权限。

首先用以 root 用户连入 MySQL,然后键入以下命令:

mysql> grantselect,insert,update,delete  on *.* [email protected] identified by‘123‘;

mysql> grant allprivileges on *.* to [email protected] identified by ‘mysql‘;(有所有权限)

然后刷新权限设置。

mysql>flush privileges;

删除用户

delete from user where user=‘用户名‘ andhost=’主机’;

例子:删除本地主机上的jacken用户(远程主机的jacken用户可登录)

mysql> delete from user whereuser=‘jacken‘ and host=’localhost’;

数据库操作

显示所有的数据库

mysql> show databases;(注意:最后有个 s)

创建数据库

mysql> create database test;

连接数据库

mysql> use test01;

查看当前使用的数据库

mysql> select database();

当前数据库包含的表信息

mysql> show tables; (注意:最后有个 s)

删除数据库

mysql> drop database test01;

表操作

备注:操作之前使用“use <数据库名>”应连接某个数据库。

建表

命令:create table <表名> (<字段名 1> <类型 1> [,..<字段名 n> <类型 n>]);

例子:

mysql> create table MyClass(

> id int(4) not null primary keyauto_increment,

> name char(20) not null,

> sex int(4) not null default ‘0‘,

> degree double(16,2));

获取表结构

命令: desc 表名,或者show columns from 表名

例子:

mysql> describe MyClass

mysql> desc MyClass;

mysql> show columns from MyClass;

删除表

命令:drop table <表名>

例如:删除表名为 MyClass 的表

mysql> drop table MyClass;

插入数据

命令:insert into <表名> [( <字段名 1>[,..<字段名 n > ])] values ( 值 1 )[, ( 值 n )]

例子:

mysql> insert into myclass values(‘‘,‘Tom‘,‘‘,96.45),(‘‘,‘Joan‘,‘‘,82.99),(‘‘,‘Wang‘,‘‘,96.59);

查询表中的数据

查询所有行

mysql> select * from MyClass;

查询前几行数据

例如:查看表 MyClass 中前 2 行数据

mysql> select * from MyClass order by idlimit 0,2;

或者

mysql> select * from MyClass limit 0,2;

select distinct 字段 from 表名;去除重复的字段值

select * from 表名 where 字段=‘值‘ and  字段2<值

select * from 表名 order by 字段;   按照指定字段升序排列

select * from 表名 order by 字段【desc】;按照指定字段降序排列

select * from 表名 order by 字段【limit n】;显示前n 行

select * from 表名 order by 字段【limit n,m】;从n+1行开始,显示出m行

select FUN_NAME(字段) frombiao1;

FUN_NAME包括sum(求和)、count(*)记录数、max(最大值)、min(最小值)

having和where的区别在于,having是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行过滤,如果逻辑允许,尽可能用where先过滤记录,这样因为结果集减少,将对聚合的效率大大提高,最后再根据逻辑看是否用having进行再过滤。

删除表中数据

命令:delete from 表名 where 表达式

例如:删除表 MyClass 中编号为 1 的记录

mysql> delete from MyClass where id=1;

修改表中数据

命令:update 表名 set 字段=新值,... where 条件

mysql> update MyClass set name=‘Mary‘where id=1;

在表中增加字段

命令:alter table 表名 add 字段类型其他;

alter table 表名 modify 字段varchar(20) 【first|after】;

alter table 表名 add  字段 int(3) 【first|after】;

alter table 表名 drop 字段;

alter table 表名 change 字段字段2 int(4) 【first|after】;

alter table 表名 rename 字段2;

modify修改字段类型  change修改字段名字(新名字加类型)rename修改表名

例如:在表 MyClass 中添加了一个字段 passtest,类型为 int(4),默认值为 0

mysql> alter table MyClass add passtestint(4) default ‘0‘

更改表名

命令:rename table 原表名 to 新表名;

例如:在表 MyClass 名字更改为 YouClass

mysql> rename table MyClass to YouClass;

更新字段内容

命令:update 表名 set 字段名[where 字段]=‘‘= 新内容

update 表名 set 字段名 =replace(字段名, ‘旧内容‘, ‘新内容‘);

例如:文章前面加入 4 个空格

update article set content=concat(‘    ‘, content);

数据库导入导出

从数据库导出数据库文件

使用“mysqldump”命令

1)导出所有数据库

格式:mysqldump -u [数据库用户名] -p -A>[备份文件的保存路径]

2)导出数据和数据结构

格式:mysqldump -u [数据库用户名] -p [要备份的数据库名称]>[备份文件的保存路径]

举例:

例 1:将数据库 mydb 导出到 /data/mydb.sql 文件中。

mysqldump -h localhost -u root -p mydb >/data/mydb.sql

然后输入密码,等待一会导出就成功了,可以到目标文件中检查是否成功。

例 2:将数据库 mydb 中的 mytable 导出到/data/mytable.sql 文件中。

mysqldump -h localhost -u root -p mydbmytable>/data/mytable.sql

例 3:将数据库 mydb 的结构导出到 /data/mydb_stru.sql 文件中。

mysqldump -h localhost -u root -p mydb--add-drop-table > /data/mydb_stru.sql

备注:-h localhost 可以省略,其一般在虚拟主机上用。

3)只导出数据不导出数据结构

格式:

mysqldump -u [数据库用户名] -p -t[要备份的数据库名称]>[备份文件的保存路径]

4)导出数据库中的Events

格式:mysqldump -u [数据库用户名] -p -E [数据库用户名]>[备份文件的保存路径]

5)导出数据库中的存储过程和函数

格式:mysqldump -u [数据库用户名] -p -R [数据库用户名]>[备份文件的保存路径]

从外部文件导入数据库中

1)使用“source”命令

首先创建数据库,然后使用该数据库。最后执行下面操作。

mysql>source [备份文件的保存路径]

2)使用“<”符号

首先创建数据库

mysql -u root –p < [备份文件的保存路径]

Other

show processlist

显示哪些线程正在运行。您也可以使用mysqladmin processlist语句得到此信息。如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程(也就是,与您正在使用的MySQL账户相关的线程)。

通配符(wildcard)

用来匹配值的一部分的特殊字符。

搜索模式(search pattern) 又字面值、通配符或两者组合构成的搜索条件。

% 任何字符出现任意次(>=0)

select prod_name,prod_id from productswhere prod_name LIKE ‘hi%‘;

_ 匹配单个字符

select prod_name,prod_id from productswhere prod_name LIKE ‘_hi‘;

正则表达式

.  代表任意字符。

|  OR匹配,两个串之一,如 a|b 匹配a或b。

[]  匹配几个字符之一,[abc]1匹配a1或b1或c1。。

-        匹配范围 [2-5]a 匹配2a或3a或4a或5a。

\\  转义,使通配符代表其本身意思。

^       有两种用法,在集合中用来否定该集合,否则指定串的开始处。

$       结束符

空白元字符

\\f             换页

\\n                      换行

\\r                       回车

\\t                       制表

\\v                       纵向制表

重复元字符

*                          0个或多个匹配

+                          一个或多个匹配(等于{1,})

?                          0个或1个匹配(等于{0,1})

{n}                       指定数目的匹配

{n,}            不少于指定数目的匹配

{n,m}              匹配数目的范围(m不超过255)

时间: 2024-08-06 20:07:03

构建Mysql三部曲之二 概念语法的相关文章

构建Mysql三部曲之三 主从案例

一.Mysql配置文件解读 (以mysql-server-5.1.73-3.el6_5.x86_64版本为例) Mysql配置文件一般位于/etc/my.cnf,默认配置如下[[email protected] /]# cat /etc/my.cnf [mysqld]datadir=/var/lib/mysql  ##从给定目录读取数据库文件socket=/var/lib/mysql/mysql.sock ##为MySQL客户程序与服务器之间的本地通信指定一个套接字文件(仅适用于UNIX/Lin

关于一些 MYSQL中的字符集概念

最近遇到mysql乱码的问题,找了些资料,先保存,后面慢慢总结自己的处理方法. 笔记: 问题环境总结: 1.前台php代码没有改变 2.原数据库,所有表的都是utf8 mysql> show variables like '%char%';+--------------------------+----------------------------------+| Variable_name            | Value                            |+---

数据库MYSQL学习系列二

一.MYSQL数据库对象与应用 2.1-MySQL数据类型 Number不止一种 · 整形 · 浮点型 整形 · INT · SMALLINT · MEDIUMINT · BIGINT type Storage Minumun Value Maximum Value (Bytes) (Signed/Unsigned) (Signed/Unsigned) TINYINT 1 -128 127 0 255 SMALLINT 2 -32768 32767 0 65535 MEDIUMINT 3 -83

Mysql事物与二阶段提交

 1.事务的四种特性(ACID) 事务可以是一个非常简单的SQL构成,也可以是一组复杂的SQL语句构成.事务是访问并且更新数据库中数据的一个单元,在事务中的操作,要么都修改,要么都不做修改,这就是事务的目的,也是事务模型区别于其他模型的重要特征之一. 事务的原子性:原子是不可分割的,事务不可分割(没有commit数据不能被读到). 事务的持久性:在commit之后,不能丢数据.(就是在提交后,数据必须落盘redo落盘). 事务的隔离性:在数据库里面,各个事务之间不能互相影响. 事务的一致性:事务

mysql数据库学习二

最近又复习了mysql中的一些概念:视图,触发器,存储过程,函数,事务,记录下. 1.视图 视图是一个虚拟表,本身并不存储数据,当sql在操作视图时所有数据都是从其他表中查出来的,因此其本质是:根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. 视图操作: -- CREATE TABLE students( -- nid INT NOT NULL AUTO_INCREMENT, -- name VARCHAR(128) NOT NULL

Linux下构建MySQL集群

构建MySQL集群 一.目标 1.安装MySQL-Cluster相关软件包. 2.依次配置管理/数据/SQL节点. 3.启动并测试MySQL-Cluster集群架构. 二.方案 使用6台RHEL 6.5虚拟机,如图所示.其中sql1和sql2作为SQL节点,ndb1和ndb2作为数据节点,mgmsvr作为管理节点,这5个节点构成MySQL Cluster体系:而另一台虚拟机192.168.4.1作为测试客户机. 构成MySQL集群体系的5个节点应安装Cluster版的MySQL相关软件包:测试用

开始了解C++基础概念语法

#include<iostream.h>是在旧的标准C++中使用.在新标准中,用#include<iostream>. iostream.h是input output stream的简写,意思为标准的输入输出流头文件.它包含: (1)cin>>"要输入的内容" (2)cout<<"要输出的内容" 对象分为两组:面向单字节的,即常见的cin.cout.cerr和clog:其面向宽字节的对应物,声明为wcin.wcout.

构建高性能服务(二)java高并发锁的3种实现

构建高性能服务(二)java高并发锁的3种实现 来源:http://www.xymyeah.com/?p=46 提高系统并发吞吐能力是构建高性能服务的重点和难点.通常review代码时看到synchronized是我都会想一想,这个地方可不可以优化.使用synchronized使得并发的线程变成顺序执行,对系统并发吞吐能力有极大影响,我的博文 http://maoyidao.iteye.com/blog/1149015 介绍了可以从理论上估算系统并发处理能力的方法. 那么对于必须使用synchr

MySQL 最基本的SQL语法/语句

MySQL 最基本的SQL语法/语句 MySQL 最基本的SQL语法/语句,使用mysql的朋友可以参考下. DDL—数据定义语言(Create,Alter,Drop,DECLARE) DML—数据操纵语言(Select,Delete,Update,Insert) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句: 1.说明:创建数据库 Create DATABASE database-name 2.说明:删除数据库 drop databa