您的位置:首页 > 运维架构 > Linux

我的Linux生涯之Mysql:Day01[Mysql基本使用]

2013-12-30 21:35 375 查看
了解提供数据库服务的软件有哪些?
Oracle access vf sql-server
mysql DB2 Postgresql Sybase
商业:Oracle DB2 sql-Server
开源:mysql Postgresql
跨平台: Oracle DB2 mysql postgresql
跨平台&开源:mysql

数据库服务应用在哪里?
网站 BBS 证券公司 银行等等

Mysql的特点
优点:
功能强大、速度快、性能优越、稳定性强、使用简单、管理方便。
Mysql是一个开放源码的小型关系型数据库
DBMS (data base manager system)
跨平台、支持AIX/FreeBSD/HP-UX/LINUX/WINDOWS等
使用C/C++编写,支持多种编译器,保证源代码可移植性。
为多种编程语言提供了API,支持Python、Java、Perl、PHP等脚本语言
非关系型数据库:Nosql

应用环境
LNMP/LAMP
搭建数据库服务器
rpm & 源码安装
[root@localhost Server]# rpm -ivh mysql-server-5.0.95-3.el5.x86_64.rpm mysql-devel-5.0.95-3.el5. mysql-5.0.95-3.el5.x86_64.rpm
[root@localhost Server]# rpm -qa |grep mysql
mysql-5.0.95-3.el5
mysql-server-5.0.95-3.el5
mysql-devel-5.0.95-3.el5
#启动之后
进程名 mysqld
进程名的所有者和组为mysql
port 3306
协议 tcp
主配置文件 /etc/ym.conf
#所有者和所属组为mysql
#如果是源码安装的话要手动创建mysql用户和组,及更改配置文件权限。
PS:
源码安装的话要使用cmask构建安装架构,也可以坚持使用之前的configure方式,通过源码包中的BUID/auturun.sh文件生成configure文件。
检测mysqld端口

[root@localhost Server]# netstat -atlunp |grep :3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 6832/mysqld
登陆服务器
[root@localhost ~]# mysql --help
[root@localhost ~]# mysql -h localhost -u root
#mysql -h [host] -u [username] -p [password]
#再使用mysql就等于上次执行的mysql命令
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
....
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
退出可以使用exit或Crontrol+C。
连接数据库服务----选择一个库----选择一个表----把数据插入到表里
//库----表----字段
sql语句,SQL语句之后要求以";"、"\g"或"\G"结尾。
#结构化查询
查询当前用户登录

mysql> select user()
-> ;
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
查看当前所在的库

mysql> select database()
-> ; //因为没有加";"所以系统认为命令没有结束。
+------------+
| database() |
+------------+
| NULL |
+------------+
1 row in set (0.00 sec)
查看库

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)
选择(打开)一个库
Use mysql; //进入mysql库
查看当前库里的表

mysql> show tables;
Empty set (0.00 sec)
#表示没有数据。
默认的三个库(首次启动mysql时自行创建的库)
information_schema //虚拟库,不存在的。它里面的数据是放在物理内存里。
#存放当前已有的库和表的信息。
#这个库可以不加分号。
mysql //授权库,授权信息。某用户对某库/某表有什么权限。允许某对象连接数据库的权限,默认只能管理员从服务登陆。
test //公共库,默认是空的。只要登陆到库就可以对该库有任何操作。
重启mysqld之后,如果没有这三个库,就会重新初始化库,重新创建。
但是如果这三个库里的表没了,那么重启也不会创建这些表,并重启失败。
/var/lib/mysql/mysql.sock //mysqld启动时才会这个文件。
那么,这时候就删除这个mysql库这个对应的文件夹,就会重新初始化。
服务器上的库是以文件夹的方式存放在数据库目录下。文件夹名与数据库同名,表是以文件的形式存放在自己所在库对应的文件夹里,
文件名与表名相同。(默认情况下mysql会把一个表的数据用3个文件来保存)
数据库目录:
/var/lib/mysql
#比如说我有个mysql库,这个库里有一个hello表
则/var/lib/mysql/下就会有一个mysql目录,这个目录下有一个hello文件。
[root@localhost ~]# ls /var/lib/mysql/ -l |grep hello
drwx------ 2 mysql mysql 4096 12-30 17:18 hello
Show tables; //显示当前所在库的表
select * from db; 加上\G是以行模式显示
#查看db表中的所有字段(记录)
数据库管理
SQL命令不区别分大小写
创建数据库
show databases; //查看库
create database databasename; //创建一个库
use databasename; //切换库
#创建一个库,/var/lib/mysql下会生成一个 "databasename"这个文件夹,主是mysql,组也是mysql,因为它是由mysql进程创建的。
在/var/lib/mysql下,只要mysql用户有相应的权限,mysql就可以在数据库中查看/写入。
所以,也可以直接mkdir一个目录来创建一个数据库
drop database databasename; //删除一个库,这个库内的表也会被删除。
#所以,在删除库之前最好先备份下这个库。
数据库名命令规则:
数据库名具有唯一性;
区别大小写;
不支持纯数字;
SQL命令不能命名数据库;
不支持特殊字符;
#创建数据库时要有标识性,如:我要给APACHE创建一个库,那么就以WEB命名。

表管理
create table 数据库.表名(
<字段名 字段类型>[(宽度) 约束条件,]
#<>内是必须要写的,[]内如果不写则使用默认格式。
字段名 字段类型(宽度) 约束条件,
字段名 字段类型(宽度) 约束条件 //最后一个字段的","就不用写。
#对于字段类型,如要进行数据统计,则都为数值。
每一列要有字段名
Mysql数据类型

1、数值类型 (如:体重、年龄、身高、工资等)
整数型
小整数 大整数 极大整数
浮点型(带小数点的数字)
单精度 float(n,m) //n表示数字位数个数,m小数位个数
float(5,2) 000.00
float(8,2) 000000.00
双精度 double(n,m) //n表示数字位数个数,m小数位个数
不执行\c
desc table_name; //查看表结构
desc mysql.user; //查看mysql库下的user表结构
向表内插入记录
insert into 数据库名.表名(字段名1,字段2,字段名n)values
也可以这样写:
insert into 数据库名.表名(字段名)
values
(字段)
#插入一条,这时候就以;结尾
多条就以“,”分开
#小数位则以四舍五入。
#超出类型的最小值则保存该类型的最小值,最大值则存最大值
unsigned 无符号的默认宽度为3
mysql> create table tl(level tinyint unsigned);
标识该字段为无符号的。
2、字符串类型(名字 家庭地址)
定长 char 255字节
变长 varchar 0~65535字节
create table studb.tc(
name char(3),
age int(3)
);
name1 char(3)
//存的值只能是3个字符,少于3个则以空格补齐3个字符
name2 varchar(3)
//存的值也是只能存3个字符,不够3个字符时,则存几个字符,开辟几个字符的空间。但是会使用一部分来检测字符位数,占用系统资源。

insert into t3
values
('name',20);//新建
insert into t3(name) values
数值类型的宽度是显示宽度。
指定宽度是为了节省内存。
int不指定宽度为11
3、日期时间类型(生日 出生年份 注册时间)
年 日期 小时 日期时间
year date time datetime/timestamp
year 年 YYYY
占用1个字节
范围 1901~2155
date 日期
占用4个字节
范围 0001-01-01~9999012-31
time 时间
范围 0001-01-01~9999-12-31
datetime 日期时间
占用8个字节
范围 1000-01-01 00:00:00
9999-12-31 00:00:00
timestamp 日期时间
占用4个字节
范围 1970-01-01 00:00:00
2073-12-31 00:00:00
时间涵数
now()
获取开始执行函数时和系统时间
sysdate()
执行时动态获得系统时间
sleep(N)
休眠N秒
curtime()
获取系统当前时间
curdate()
获取系统当前日期
month()
获取指定日间中的月份
date()
获取指定日期中的时间
year()
获取指定日期中的年份
给该字段赋值时,两位数值的话,则为1~69----20xx,
70~99----19xx。
0则为0000,错误。
#只读取与类型匹配的值
mysql> create table t7(
-> name varchar(10),
-> starday year,
-> workday date,
-> timework time,
-> meetting datetime
-> );
insert into t7 values("jim",now(),now(),now(),now());
inter into t7
values
("tom",1987,19901009,093000,20130110093000);
#按指定格式显示加“”
插入的记录要与格式符合。
cretae table t8(
time1 datetime,
time2 datestamp
);
datestamp
当不给该字段赋值时,则使用当前系统时间。
只查看某字段
select name,timework, from t7;
4、枚举类型 (字段的值只能在列举的范围内选择)
(性别 爱好)
#字段的值,在例举的值内选
单选(在列举范围内只能选一个)
enum("值1","值2","值n")
多选(在列举范围内选择多个)
set("值1","值2","值n")
//例:在studb数据库里创建名为stu_info表,保存学生的年龄。
create table t8(
name varchar(10),
age tinyint(2) unsigned
sex enum('boy','gril')
linkes set('book','music','film','football')
);
#linke"
#选项值要加""
#不在字段范围内不会保存该值。
#同一字段内,在范围内及不在范围内排除不在范围内的值
单选时,可以使用列表排列的顺序的值来选择值。
多选时,使用列表排列的顺序选择的值是不固定的。
desc t9;
...
...
null
not noll //不允许为空
default
null //不给该字段赋值时,使用这个指定的值,表示为空,不区分大小写。
#只有"null"/"NULL"才被认为是空值。
根据所需值,来设定类型。
插入的值要和类型匹配

//插入3条记录,查看表中的记录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息