mysql简介&基本语句

来源:互联网 发布:ipad淘宝没有免费试用 编辑:程序博客网 时间:2024/06/05 14:36

数据库简介

1、数据库
数据库指的是以一定的方式存储在一起的,能够为多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据的集合
数据库模型:
层次模型:
网状模型:
关系模型:
2、数据库管理系统 (RDBMS ——Relational DataBase Management System)是为管理数据库而设计的计算机软件系统,一般具有存储、截取、安全保障、备份等功能

3、数据库的组成:
数据—>表—–>库
数据:描述事物的符号
表:二维表(行与列)组成

数据库由表组成; 数据库映射到操作系统中是目录。
表由相关记录组成; 记录/元组:行 表映射到系统中的是文件
记录是由一定数量的不同属性的字段组成; 字段/属性/列:
数据库中不仅仅有表还拥有索引、存储过程、触发器、视图等

4、数据库的分类
1)关系型数据库
关系型数据库是建立在关系模型基础上的,使用SQL语言作为查询语言
常见关系型数据库
a、MySQL:
b、MariaDB:MySQL替代品
c、Microsoft Access
d、SQL Server
e、Oracle
f、sybase
g、db2 IBM
2)非关系型数据库(NoSQL=Not only sql)
不使用sql作为查询语言的
mongodb:文件导向型数据库
redis:内存数据库,速度快
Hbase —— Hadoop database 分布式数据库 跟云结合
主要用于处理大数据的
自己学习一下非关系型数据库。

5、MySQL的结构
C/S结构: 客户端和服务器端都得安装软件
客户端的使用:
交互式:输入一条命令,输出一个结果
批处理:执行sql脚本

6、mysql使用场景
1)web网站系统
2)日志记录系统
3)数据仓库系统
4)嵌入式系统

一.数据库安装

 1、rpm、deb 2、二进制/通用格式 3、源码包

版本:
商业版:需要付费
社区版:免费 最新5.7.14

#yum install -y mysql-server   //会自动解决依赖关系,自动安装mysql客户端启动服务[root@mysql mysql]# /etc/init.d/mysqld restart   //先将mysql初始化,然后再启动mysqld

二.数据库登录

MySQL默认情况下是支持匿名登录的1、匿名登录    [root@mysql mysql]# mysql        选项:            -u  用户名            -h  远程登录时指定MySQL服务器            -p  必须输入密码            用户名的格式:                root@www.baidu.com                root@192.168.100.100    [root@CA ~]# mysql     //匿名登录 隐藏有mysql -u root -h localhost -p    mysql> quit         //退出  或\q    Bye2、本地登录(账号密码)    给root用户设置密码        [root@mysql mysql]# mysqladmin -u root password "123456"        //为了安全,将mysql库中user表中其他root信息删除        mysql>  select host,user,password from mysql.user;        +--------------+------+-------------------------------------------+        | host         | user | password                                  |        +--------------+------+-------------------------------------------+        | localhost    | root | *AC241830FFDDC8943AB31CBD47D758E79F7953EA |        | CA.benet.com | root |                                           |        | 127.0.0.1    | root |                                           |        | localhost    |      |                                           |        | CA.benet.com |      |                                           |        +--------------+------+-------------------------------------------+    本地登录        [root@mysql mysql]# mysql -uroot -p123456   //-u指定用户名  -p后面直接接密码,不能有空格 不建议使用        或者        [root@mysql mysql]# mysql -u root -p     //安全些            Enter password:     -------------------------------------        [root@mysql mysql]# mysql        ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)    账号密码不对。        解决办法:            破解root密码。     破解root密码前提,就是你能够停止mysql服务。    1)停止服务        [root@mysql ~]# /etc/init.d/mysqld stop    2)使用跳过授权表的方式启动数据库        [root@mysql ~]# mysqld_safe --skip-grant-tables --user=mysql &    3)匿名登录        [root@mysql ~]# mysql    4)修改user表        mysql> use mysql;            Database changed        mysql> select user,host,password from user;        mysql> update user set password=password("redhat") where user='root' and host='localhost';   5)重启mysql服务        [root@mysql mysql]# mysqladmin shutdown     //正常情况下使用mysqld_safe启动的服务需要这么关闭        [root@mysql mysql]# ps -ef | grep mysqld            root     25049 16794  0 11:39 pts/0    00:00:00 grep mysqld        --------------------            如果正常关闭不好使,那么就强制杀死进程            [root@mysql mysql]# kill -9 `pgrep mysqld`        --------------------        [root@mysql mysql]# /etc/init.d/mysqld start    6)重新使用新的密码登录数据库即可        [root@mysql mysql]# mysql -uroot -predhat    -------------------------------------3、远程登录    [root@mysql mysql]# mysql -u root -h 172.16.254.200 -p     //暂时无法执行,需要授权才行

三.获取帮助

mysql获取客户端的帮助[root@mysql mysql]# mysql -u root -pmysql> help    或者?  或者\h    clear     (\c)    清除当前输入的sql语句,注意:一定要在敲分号之前使用    exit      (\q)    退出mysql数据库管理系统    quit    rehash    (\#)    有一部分命令可以补齐    source    (\.)    执行sql脚本    status    (\s)    查看系统状态    system    (\!)    执行操作系统命令use       (\u)    切换数据库For server side help, type 'help contents'mysql> \! ls /tmp        hsperfdata_root  orbit-root       virtual-root.jJOx68        keyring-FLJyTQ   pulse-3YTyjP9f71oU   virtual-root.mOH48s        mysql.sock   pulse-SJ9caEoG9IyT   VMwareDnD        orbit-gdm    virtual-root.i32o5R  vmware-rootmysql> show databases;          查看有哪些数据库+--------------------+| Database           |+--------------------+| information_schema || mysql              || test               |+--------------------+3 rows in set (0.00 sec)

mysql> use mysql; 切换到mysql数据库中
Database changed
mysql> show tables; 查看当前所在数据库有哪些表
+—————————+
| Tables_in_mysql |
+—————————+
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| host |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| servers |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+—————————+
23 rows in set (0.00 sec)

MySQL获取服务器端的帮助
mysql> help contents
You asked for help about help category: “Contents”
For more information, type ‘help ’, where is one of the following
categories:
Account Management
Administration
Compound Statements
Data Definition
Data Manipulation
Data Types
Functions
Functions and Modifiers for Use with GROUP BY
Geographic Features
Help Metadata
Language Structure
Plugins
Table Maintenance
Transactions
User-Defined Functions
Utility
mysql> help data types
You asked for help about help category: “Data Types”
For more information, type ‘help ’, where is one of the following
topics:
AUTO_INCREMENT 自增
BIGINT
BINARY
BIT
BLOB
BLOB DATA TYPE
BOOLEAN
CHAR
CHAR BYTE
mysql> help auto_increment
Name: ‘AUTO_INCREMENT’
Description:
The AUTO_INCREMENT attribute can be used to generate a unique identity
for new rows:

    URL: http://dev.mysql.com/doc/refman/5.5/en/example-auto-increment.html    Examples:    CREATE TABLE animals (         id MEDIUMINT NOT NULL AUTO_INCREMENT,         name CHAR(30) NOT NULL,         PRIMARY KEY (id)    ) ENGINE=MyISAM;    INSERT INTO animals (name) VALUES        ('dog'),('cat'),('penguin'),        ('lax'),('whale'),('ostrich');    SELECT * FROM animals;

四.SQL语句

  SQL  :  (Structured Query Language)  结构化查询语言  专门用来和关系型数据库进行通信的语言T-SQL:微软在标准sql上进行的加强pl/sql:ORACLESQL:MySQL

SQL语句中的大小写问题:
1)关键字、函数名、列名和索引名不区分大小写
2)数据库名、表名、别名及视图名区分大小写的(因为linux是区分大小写的)
3)存储过程、事务不区分大小写,触发器区分大小写的。
4)每一条语句,默认以分号为结束符

数据库对象:


视图
索引
事务
存储过程
触发器
用户
权限

DBA:
开发:创建库、表、存储过程、触发器等
管理:用户、权限、性能分析、备份、恢复等

MySQL的引擎:
MyISAM:不支持事务 表级锁
Innodb:支持事务 支持行级锁 支持外键

mysql> SHOW ENGINES; 查看mysql所支持的引擎

SQL语句主要功能
增删改查

SQL语句的分类
DML:Data Manipulation Language 数据操纵语言
insert 插入/增加
update 更新/修改
delete 删除
DCL:Control 数据控制语言
grant 授权
revoke 回收/撤销权限
DDL:Definition 数据定义语言
create 创建
alter 修改
drop 删除
truncate 截断
DQL:Query 数据查询语言
select

基本SQL语句

1、查看当前用户
[root@mysql mysql]# mysql -uroot -p123456
mysql> select user();
+—————-+
| user() |
+—————-+
| root@localhost |
+—————-+
1 row in set (0.00 sec)

2、对数据库的操作
1)查看当前操作的数据库
mysql> select database();
+————+
| database() |
+————+
| NULL |
+————+
1 row in set (0.00 sec)
2)选择操作哪个数据库
mysql> use test;
Database changed
3)查看系统中有哪些数据库
mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema | 信息模式数据库,保存服务器的信息
| mysql | 核心管理数据库,保存了用户和权限信息,记录了和系统安全相关的信息
| performance_schema | 性能模式数据库,搜索服务器的性能参数
| test | 测试数据库
+——————–+
4 rows in set (0.02 sec)
4)查看当前数据库下有哪些表
mysql> show tables;
Empty set (0.02 sec)
5)创建数据库
语法:
CREATE DATABASE 库名 [ [DEFAULT] CHARACTER SET [=] 字符集名 | [DEFAULT] COLLATE [=] 排序规则 ]

    查看mysql所支持的字符集:    mysql>  show character set;       //显示字符集与该字符集所对应的默认排序规则    查看mysql中所有字符集的排序规则:    mysql>  show collation;        //同一个字符集可能拥有不同的排序规则    mysql> create database updb1;        Query OK, 1 row affected (0.01 sec)    注意:在同一个数据库管理系统中数据库名不能重复6)删除数据库(轻易别这么做,风险大)    mysql> drop database updb1;        Query OK, 0 rows affected (0.04 sec)

3、对表的操作
注意:
1)表一定要存在数据库中
2)在同一个数据库中,表名不能重复
1)创建表(创建的是表结构)
语法:create table 表名 (字段1名 字段类型, 字段2名 字段类型, … …, 字段n名 字段类型);
mysql> use test;
Database changed
mysql> create table t1 (id int,name char(10));
Query OK, 0 rows affected (0.05 sec)
2)查看表结构
mysql> desc t1;
+——-+———-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+———-+——+—–+———+——-+
| id | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
+——-+———-+——+—–+———+——-+
2 rows in set (0.00 sec)
————————-
Field:字段名字
Type:字段类型
Null:是否允许为空
Key:键值(主键等)
Default:默认值
Extra:其他(自增等)
3)查看建表时使用的语句
mysql> show create table t1\G
********** 1. row ***********
Table: t1
Create Table: CREATE TABLE t1 (
id int(11) DEFAULT NULL,
name char(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> show create table mysql.user\G
mysql.user:库名.表名
4)向表中插入数据
a、插入数据时,不指定字段,在写值的时候顺序要与表中的字段的顺序一一对应,值的数量要和字段数一样多
语法:insert into 表名 values (值1,值2,……,值n)括号里为一条数据的值;
mysql> insert into t1 values(1,’Tom’);
Query OK, 1 row affected (0.00 sec)
b、插入时指定字段
语法:insert into 表名(字段名1,字段名2,… …,字段名n) values (值1,值2,……,值n);
mysql> insert into t1(id) values(250);
mysql> insert into t1(name,id) values(‘Mary’,3);
mysql> select * from t1; //查询t1表中的数据
+——+——+
| id | name |
+——+——+
| 1 | Tom |
| 250 | NULL |
| 3 | Mary |
+——+——+
3 rows in set (0.00 sec)
c、向表中插入多条数据
mysql> insert into t1 values(4,’jack’),(5,’Kite’),(7,’LiLei’); //同时向t1表中插入三条记录
5)查询表中数据
mysql> select * from t1; //全表查询 *号表示为所有字段
mysql> select name from t1; //指定字段查询 select 后面接字段名字
mysql> select name,id from t1; //查询多个字段,字段间用逗号相隔
6)修改表结构 alter
a、增加字段
(1)向表中增加字段(默认添加到最后一个字段)
语法:alter table 表名 add 字段名 字段类型 [first|after 字段名];
查看alter table的帮助信息:
mysql> help alter table;
mysql> alter table t1 add sex char(10);
mysql> desc t1;
+——-+———-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+———-+——+—–+———+——-+
| id | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| sex | char(10) | YES | | NULL | |
+——-+———-+——+—–+———+——-+
3 rows in set (0.01 sec)
(2)将字段添加为表中的第一个字段
mysql> alter table t1 add qq int first;
(3) 在某个字段的后面新增字段
mysql> alter table t1 add tel int(15) after qq;
b、修改字段属性
change:既能修改字段的类型和长度,又能修改字段的名字
modify:只能修改字段的类型和长度
modify的语法:
alter table 表名 modify 字段名 字段类型;
mysql> alter table t1 modify name char(15);
change的语法:
alter table 表名 change 原字段名 新字段名 字段类型
注意:如果只修改字段类型,那么原字段名和新字段名一样
如果只修改字段名字,那么字段类型与原来的字段类型保持一致
mysql> alter table t1 change qq weixin int;
c、删除字段
语法:alter table 表名 drop 字段名;
mysql> alter table t1 drop sex;
7)修改表名
语法:alter table 表名 rename 新表名;
mysql> alter table t1 rename t22;
mysql> select * from t1;
ERROR 1146 (42S02): Table ‘test.t1’ doesn’t exist

8)更新表中的数据(update)
语法:update 表名 set 字段名=值[,字段名2=值2][ where 条件];
mysql> update t22 set name=’HanMeimei’ where id=250;
mysql> update t22 set weixin=1234567; //会将该表中这段字段的值全部修改为1234567
mysql> update t22 set id=2,name=’HanMei’ where id=250; //同时修改多个字段
9)删除表中记录 delete
语法:delete from 表名 [where 条件];
(1)删除表中指定行
mysql> delete from t22 where id>=3;
Query OK, 4 rows affected (0.01 sec)
(2)删除表中全部数据
mysql> delete from t22;
mysql> select * from t22;
Empty set (0.00 sec)
10)截断表 truncate 也是删除表中的全部记录
mysql> create table test (id int);
mysql> insert into test values(); //向表中插入空值
mysql> insert into test values();
mysql> insert into test values();
mysql> select * from test;
mysql> truncate table test;
mysql> select * from test;
delete和truncate区别
delete:DML,可以回滚
truncate:DDL,不能够回滚的,删除数据的同时会释放空间。
大表数据清除时候,一定要用truncate,速度快。
11)删除表
drop table 表名;
mysql> drop table test;
mysql> drop table t22;

五.运算符

1、算数运算符2、比较运算符3、逻辑运算符1、算数运算符    +   -   *   /    %(取模,求余)       mysql> select 1+5    -> ;        //当你看到-> 证明命令未敲完             +-----+            | 1+5 |            +-----+            |   6 |            +-----+            1 row in set (0.00 sec)    mysql> select 1+5;    mysql> select 3+3.45678;        +-----------+        | 3+3.45678 |        +-----------+        |   6.45678 |        +-----------+        1 row in set (0.00 sec)   mysql> select power(2,10),2*5,5/3;     //power(2,10)幂运算        +-------------+-----+--------+        | power(2,10) | 2*5 | 5/3    |        +-------------+-----+--------+        |        1024 |  10 | 1.6667 |        +-------------+-----+--------+        1 row in set (0.00 sec)     mysql> select 1+'5a6';             //结果为6,字符串以数字开头,转换成数字    mysql> select 1+'a5';            //结果为1,字符串以字母开头,转换成0    mysql> show warnings;        //查看警告信息         +---------+------+----------------------------------------+        | Level   | Code | Message                                |        +---------+------+----------------------------------------+        | Warning | 1292 | Truncated incorrect DOUBLE value: 'a5' |        +---------+------+----------------------------------------+        1 row in set (0.00 sec)2、比较运算符    >      <     >=    <=    =             !=  等价于 <>   —— 不等于      mysql> select 1>3;           //返回0,假   mysql> select 1<>2;        //返回1,真   mysql> select 'b'='B';       //返回1,默认不区分大小写   mysql> select binary 'b'='B';      //返回0,想区分大小写,指定binary关键字3、逻辑运算符    and  (&&) 与    两个表达式都成立,结果为真;除此以外都为假        or (||)  或     两个表达式只要有一个成立,结果结果就为真;除此以外都为假    not 非/取反     mysql> select 4>3 and 'a'='A';     mysql> select 4>3 && 'a'='A';        mysql> select 4>3 or 'a'='c';     mysql> select 4>3 || 'a'='c';     mysql> select not 4<5;

六.函数

一、时间函数二、聚合函数   ****三、其他函数一、时间函数    1、查看当前时间        mysql> select current_time();        mysql> select curtime();    2、查看当前日期        mysql> select current_date();        mysql> select curdate();    3、查看当前的系统时间        mysql> select now();        mysql> select sysdate();二、聚合函数    求和       sum(字段名)    求平均值   avg(字段名)    求最大值   max(字段名)    求最小值   min(字段名)    统计匹配行数      count(字段名)      count(*):用于统计表中有多少条记录    准备环境        mysql> create table score (sno int,sname char(10),ule int,ula int,uoa int);        mysql> insert into score values(1,'tom',70,80,90),(2,'mary',55,75,65),(3,'jack',75,45,95),(4,'mike',90,100,86);        mysql> select * from score;            +------+-------+------+------+------+            | sno  | sname | ule  | ula  | uoa  |            +------+-------+------+------+------+            |    1 | tom   |   70 |   80 |   90 |            |    2 | mary  |   55 |   75 |   65 |            |    3 | jack  |   75 |   45 |   95 |            |    4 | mike  |   90 |  100 |   86 |            +------+-------+------+------+------+            4 rows in set (0.01 sec)       显示ule最高分,ula最低分            mysql> select max(ule),min(ula) from score;                +----------+----------+                | max(ule) | min(ula) |                +----------+----------+                |       90 |       45 |                +----------+----------+                1 row in set (0.01 sec)            --------------------------------------------------                列的别名                    写法:列名 [as] 别名                    mysql> select max(ule) mule,min(ula) nula from score;  //给列起别名                        +------+------+                        | mule | nula |                        +------+------+                        |   90 |   45 |                        +------+------+            --------------------------------------------------     统计表中的行数(记录数)        mysql> select count(*) from score;            +----------+            | count(*) |            +----------+            |        4 |            +----------+            1 row in set (0.00 sec)        mysql> insert into score values();           mysql> select count(sno) from score;       //忽略空值            +------------+            | count(sno) |            +------------+            |          4 |            +------------+            1 row in set (0.00 sec)      mysql> delete from score where sno is null;     //将sno字段为空的行删除掉                    is null:用来匹配空的                    is not null:匹配非空的      计算ula的平均成绩            mysql> select avg(ula) from score;                +----------+                | avg(ula) |                +----------+                |  75.0000 |                +----------+                1 row in set (0.00 sec)       查询每一科的总成绩            mysql> select sum(ule),sum(ula),sum(uoa) from score;                +----------+----------+----------+                | sum(ule) | sum(ula) | sum(uoa) |                +----------+----------+----------+                |      290 |      300 |      336 |                +----------+----------+----------+                1 row in set (0.00 sec)       查询每个学生的姓名和总成绩            mysql> select sname,ule+ula+uoa total from score;    //select后面可以加算数表达式                +-------+-------+                | sname | total |                +-------+-------+                | tom   |   240 |                | mary  |   195 |                | jack  |   215 |                | mike  |   276 |                +-------+-------+                4 rows in set (0.00 sec)       查询每个学生的姓名和平均成绩           mysql> select sname,(ule+ula+uoa)/3 ave from score;                +-------+---------+                | sname | ave     |                +-------+---------+                | tom   | 80.0000 |                | mary  | 65.0000 |                | jack  | 71.6667 |                | mike  | 92.0000 |                +-------+---------+                4 rows in set (0.00 sec)三、其它函数        1、连接函数     concat()          concatnate:连接    mysql> select concat(sno,sname) from score;        +-------------------+        | concat(sno,sname) |        +-------------------+        | 1tom              |        | 2mary             |        | 3jack             |        | 4mike             |        +-------------------+        4 rows in set (0.00 sec)   mysql> select concat(sno,' ',sname) from score;     //单引号中间是字符串    帮助:mysql>help concat;2、upper()    转换成大写    lower()    转换成小写     mysql> select sname,upper(sname) from score;        +-------+--------------+        | sname | upper(sname) |        +-------+--------------+        | tom   | TOM          |        | mary  | MARY         |        | jack  | JACK         |        | mike  | MIKE         |        +-------+--------------+        4 rows in set (0.02 sec)     mysql> select upper('dsadas');        +-----------------+        | upper('dsadas') |        +-----------------+        | DSADAS          |        +-----------------+        1 row in set (0.00 sec)    3、求长度    length() mysql> select length('dadasdasfdswdredgcdf');        +--------------------------------+        | length('dadasdasfdswdredgcdf') |        +--------------------------------+        |                             20 |        +--------------------------------+        1 row in set (0.02 sec)  mysql> select sname,length(sname) from score;        +-------+---------------+        | sname | length(sname) |        +-------+---------------+        | tom   |             3 |        | mary  |             4 |        | jack  |             4 |        | mike  |             4 |        +-------+---------------+        4 rows in set (0.01 sec)
原创粉丝点击