mysql 基础学习

mysql  oracle  DB2  SQL-SERVER

安装提供数据库服务的软件包

[root@mail yum.repos.d]# rpm -qa | grep mysql

mysql-5.0.77-4.el5_4.2 工具包

mysql-server-5.0.77-4.el5_4.2 提供服务的主包

服务名称mysqld

进程名称mysqld

进程运行的所有者是mysql帐号

使用的传输协议tcp

默认监听端口 3306


启动数据库服务

#/etc/init.d/mysqld start/restart/stop/status

主配置文件/etc/my.cnf

访问数据库服务 (要输入正确的用户名和密码 才可以访问)

默认情况下只允许使用数据库管理员从数据库服务器本机登录

数据库管理员 名字 叫root 且密码默认为空


[root@mail mysql]# /etc/init.d/mysqld status

mysqld (pid 6331) is running...

登录数据库服务器

# mysql -h数据库服务器的Ip地址  -u登录用户名 -p密码


[root@mail mysql]# mysql -hlocalhost -uroot -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 2

Server version: 5.0.77 Source distribution


Type 'help;' or '\h' for help. Type '\c' to clear the buffer.


mysql>quit; 退出登录


#mysql

mysql> select user(); 查看当前登录用户信息 那个用户从那登录的

+----------------+

| user()         |

+----------------+

| root@localhost |

+----------------+


mysql> select database(); 查看登录后 所在的数据库是那个

+------------+

| database() |

+------------+

| NULL       | 表示登录的用户没有使用任何一个库

+------------+

1 row in set (0.00 sec)


mysql> show databases; 查看当前数据库服务器上已有的库 默认有3个初始库

+--------------------+

| Database           |

+--------------------+

| information_schema | 虚拟库不占用磁盘空间 数据存放在内存里 服务器的参数信息

| mysql              | 授权库

| test               | 公共库

+--------------------+

库操作

建库 (数据库名具有唯一性 库名区分大小些 不能用纯数字

给数据库命名 不要用特殊字符 关键子 )

create database 数据库名;

drop database  数据库名;(如果库里有表也同时被删除了)

use 数据库名;  切换数据库


表操作(表是存放在数据库里的 同一个库里表名不能相同)

mysql> show tables; 查看当前所在的库里有那些表


建表

create table 表名(

<字段名1>  <类型>[(宽度) 约束条件],

<字段名2>  <类型>[(宽度) 约束条件],

<字段名3>  <类型>[(宽度) 约束条件],

<字段名n>  <类型>[(宽度) 约束条件]

);

mysql> create table gamet(          

   -> gamename char(3),

   -> sex char,

   -> level tinyint

   -> );

Query OK, 0 rows affected (0.00 sec)


mysql> desc gamet; 查看表结构(向表里插入记录时 要和字段的类型 约束条件匹配 才能插入记录成功)

字段名字    字段的类型 是否为空 索引 字段默认值  描述

+----------+------------+------+-----+---------+-------+

| Field    | Type       | Null | Key | Default | Extra |

+----------+------------+------+-----+---------+-------+

| gamename | char(3)    | YES  |     | NULL    |       |

| sex      | char(1)    | YES  |     | NULL    |       |

| level    | tinyint(4) | YES  |     | NULL    |       |

+----------+------------+------+-----+---------+-------+


insert into 表名(字段名1,字段名2,字段名n)

values

(字段1的值,字段2的值,字段n的值),

(字段1的值,字段2的值,字段n的值),

(字段1的值,字段2的值,字段n的值);


xmysql> insert into gamet(gamename,sex,level)

   -> values

   -> ("swk","b",300),

   -> ("shs","b",250),

   -> ("zbj","b",250),

   -> ("ts","b",0);


查看表记录

mysql> select 字段名列表 from 表名;

* 代表表里的所有字段

mysql> select level,gamename from gamet;


mysql> select * from gamet;

+----------+------+-------+

| gamename | sex  | level |

+----------+------+-------+

| swk      | b    |   127 |

| shs      | b    |   127 |

| zbj      | b    |   127 |

| ts       | b    |     0 |

+----------+------+-------+

                                                    无符号

mysql> create table t2( name char(3), level tinyint  unsigned );


字段类型


数值类型

   整数类型 (工龄 年龄)


   浮点类型(有小数位 10.88) 工资 身高 体重

   gz_tab

   name

   gz float(7,2)             10000.00

                             99999.99

                            100000.00

   mysql> create table gz_t(

   -> name char(3),    

   -> gz float(7,2)

   -> );


字符类型(255)

char 定长字符     name char(3)   tom jim  yy y  

varchar  变长字符 name varchar(3) tom yy

                 age  int(3)     99  999 9999

                                   1  11 111 1111


mysql> create table t4( name char(1), age int(4) zerofill );


日期类型(生日 上班时间 工作年份) now() 获取完整时间的函数

year年    date 日期     time 时间   datetime 日期时间

2012      2012-09-03   09:30     2012-09-03 09:30:00

01-69  20

70-99  19

00     0000

name

jobday   year

birthday  date

workstart time

workstartday datetime


mysql> create table t5(

   -> name varchar(10),  jim

   -> jobday year,       2009

   -> birthday  date,    1988-10-9

   -> workstart time,    10:30

   -> workstartday datetime); 2009-09-10 8:00


ql> insert into t5 values("tom",now(),now(),now(),now());

mysql> insert into t5 values("lsy",2009,19900909,093000,20091018093000);

mysql> insert into t5 values("lsy",2009,"19900909","093000","20091018093000");


mysql> delete from t5; 删除表里的所有记录

                 表名

mysql> drop table t2;

                 表名  删除表


枚举类型(字段的值要在给定的范围内选择)

enum 只能在给定的范围内选择一个值

set  在给定的范围内可以选一个或多个值

性别  enum("男","女","保密")

爱好  set("look“,"film",“game”,“muisc")


name  varchar(10)

sex   enum("boy","gril","no")

loves  set("look“,"film",“game”,“muisc")


mysql> create table gamedb.t6(

   -> name varchar(10),

   -> sex enum("boy","gril","no"),

   -> loves set("book","film","music","football")

   -> );


mysql> insert into t6 values("jim",'boy','book');


mysql> insert into t6 values("tom",'boy',"film,music");


约束条件

null  是否允许字段值为null(空) 默认允许为null

                              not null  不允许为空

key   索引字段 主键 外键 索引(index unique)

default 字段的默认值 默认的默认值是Null

       插入记录时不给字段赋值时使用字段的默认值给字段赋值

       default 值 (值的类型 要和字段类型匹配)


Extra  描述信息

mysql> create table t7(

   -> name varchar(10) not null,

   -> sex enum("boy","gril") not null default "boy",    

   -> age int(2) not null default 23,

   -> loves set("a","b","c","d") not null default "a,b"

   -> );


mysql> delete from t4 where age is NULL;

                               指定的字段没有值


在studb库里 创建 stuinfo表 字段如下

姓名 字符类型 不允许为空 名字的最大长度是10个字符 变长

性别 默认是 boy  不允许为空 可选范围只能是在 boy  gril 里选

年龄 不允许为空  默认24 是tinyint类型 且不允许 存负数

爱好  不允许为空 默认爱好 football book  可以有多个爱好

生日   不允许为空

上课时间  不允许为空

出生年份  不允许为空

专业  不允许为空 默认是 network 单选(dba  shell  os  c  network)

成绩  数值类型 100分 不允许为空 默认 60分  


修改表结构         表名

mysql> alter table test1   动作


动作

add     添加字段 (用add新添加的字段会按照添加的顺序追加在已有字段                   的下方)

mysql> alter table test1

   -> add name char(10) not null,

   -> add age int(3) not null default 19;


first 添加字段时,把新添加的字段放在所有已有字段的上方

mysql> alter table test1 add mail varchar(50) not null first;


after 字段名 添加字段时,把新字段添加在指定字段的下方

mysql> alter table test1 add loves set("book","film","network") not null  default "book" after name;



modify  修改字段类型 和 约束条件

mysql> alter table test1 modify age tinyint(2) unsigned not null default 23;



change  修改字段名 和 修改字段类型、约束条件

                                源   新    

mysql> alter table test1 change mail email varchar(50) not null;


mysql> alter table test1 change email usermail char(10) not null;



drop    删除字段             字段名

mysql> alter table test1 drop id;

mysql> alter table test1 drop name,drop usermail;


更新表中的记录

             表名     字段名=值列表        条件表达式

mysql> update test1 set name="tom"     where  id=2;


mysql> update test1 set id=1,loves="book,film,network" where id=0;



给表重命名

mysql> alter table 源表名 rename 新表名;

mysql> alter table test1  rename stuinfo;


复制表                       复制源表的那些数据  

mysql> create table 新表名  select * from stuinfo;

mysql> create table stuinfobak select * from stuinfo; 复制源表所有数据

mysql> create table stuinfo_1 select id,name,age from stuinfo; 复制源表部分数据


只复制源表的表结构(源表 表结构中key字段的属性不会同步给新表)                                            

mysql> create table gnome_stuinfo select * from stuinfo where 1=2 ;

                                                             不成立的条件

练习

按如下表结构建表

mysql> desc stuinfo;

+-------+------------------------------+------+-----+---------+-------+

| Field | Type                         | Null | Key | Default | Extra |

+-------+------------------------------+------+-----+---------+-------+

| id    | int(3)                       | NO   |     | NULL    |       |

| name  | varchar(10)                  | NO   |     | NULL    |       |

| loves | set('book','film','network') | NO   |     | book    |       |

| age   | tinyint(2) unsigned          | NO   |     | 23      |       |

+-------+------------------------------+------+-----+---------+-------+

4 rows in set (0.00 sec)


修改stuinfo表的表结构 要求如下

1 删除id字段

2 添加address字段放在所有字段的下方 变长字符类型 宽度是60 不允许为空

3 在name字段下方添加名为sex的字段 枚举类型 字段的值只能在boy或girl

 内选择某一个 不允许为空 字段的默认值是boy

4 在所有字段的上方添加stu_id 整形不允许为空

5 将loves字段改名为likes

 可选值的范围改为set('book','film','network','music','football') 不允许为空

 默认值改为 book 和 football

6 向表内插入10条记录

7 将stuinfo表改名为tea_tab


表结构中的key(索引)


索引 相当于书的目录

好处 会加快select速度

坏处 减慢insert  update delete 的速度    


index (标记 MUL ) 索引 字段值可以重复 且会把字段值按顺序排序


建表时 就指定 那个字段是index字段

mysql> create table t1(

   -> stu_id int(3) not null,

   -> name varchar(10) not null,

   -> age int(3) not null,

   -> index(name)   #指定表中的name字段为index字段

   -> );


把已存在的表中的某个字段设置为索引字段

mysql> create index 索引名 on 表名(字段名);


mysql> desc t2;

+--------+-------------+------+-----+---------+-------+

| Field  | Type        | Null | Key | Default | Extra |

+--------+-------------+------+-----+---------+-------+

| stu_id | int(3)      | NO   |     | NULL    |       |

| name   | varchar(10) | NO   |     | NULL    |       |

| age    | int(3)      | NO   |     | NULL    |       |

+--------+-------------+------+-----+---------+-------+

3 rows in set (0.00 sec)


mysql> create index name on t2(name);

Query OK, 0 rows affected (0.00 sec)

Records: 0  Duplicates: 0  Warnings: 0


mysql> desc t2;

+--------+-------------+------+-----+---------+-------+

| Field  | Type        | Null | Key | Default | Extra |

+--------+-------------+------+-----+---------+-------+

| stu_id | int(3)      | NO   |     | NULL    |       |

| name   | varchar(10) | NO   | MUL | NULL    |       |

| age    | int(3)      | NO   |     | NULL    |       |

+--------+-------------+------+-----+---------+-------+

3 rows in set (0.00 sec)


删除表中字段的索引属性

mysql> show index from 表名;  显示指定表的索引信息


mysql> drop index 索引名 on 表名;


unique (UNI) 索引 字段值不可以重复 且会把字段值按顺序排序

mysql> create table t4(

stu_id int(3) not null,

name varchar(10),

age int(3) not null,

unique(name)

);


mysql> drop index name on t4;


mysql> create unique index stuid on t4(stu_id);



primary key 主键 只能把表中的一个字段设置为primary key

                字段的值也不可以重复 如果要把一个表里的多个字段

                都设置为primary key字段

                多个字段同时作primary key 是叫符合主键(要在建表之初一起指定)


mysql> create table t5( id int(3) primary key auto_increment,    

   -> name  varchar(10) not null,

   -> age int(2) not null,

   -> index(name)

   -> );


mysql> create table t5(

   -> id int(3) auto_increment,

   -> name char(3) not null,

   -> age int(3),

   -> primary key(id)

   -> );


把已有表里的某个字段设置为主键盘字段

mysql> alter table t7 add primary key(id);

mysql> alter table t7 modify id int(3) not null auto_increment;



mysql> desc t7;

+-------+---------+------+-----+---------+----------------+

| Field | Type    | Null | Key | Default | Extra          |

+-------+---------+------+-----+---------+----------------+

| id    | int(3)  | NO   | PRI | NULL    | auto_increment |

| name  | char(3) | YES  |     | NULL    |                |

+-------+---------+------+-----+---------+----------------+

2 rows in set (0.01 sec)


mysql> alter table t7 modify id int(3) not null;

mysql> alter table t7 drop primary key;



复合主机

ser_access

hostip   ser_name  ser_port  a_status enum('allow','deny') default "deny"

primarykey         primarykey


mysql> create table ser_access(

   -> hostip varchar(15) not null,

   -> ser_name varchar(15) not null,

   -> ser_port varchar(5) not null,

   -> a_stuatus enum('allow','deny') not null default "deny",

   -> primary key(hostip,ser_port)

   -> );


mysql> select * from ser_access;

+---------+----------+----------+-----------+

| hostip  | ser_name | ser_port | a_stuatus |

+---------+----------+----------+-----------+

| 1.1.1.1 | vsftpd   | 21       | allow     |

| 1.1.1.1 | named    | 53       | allow     |

+---------+----------+----------+-----------+


*当表中有复合主键时 只要复合主键的值 不同时重复就可以插入记录



foreign key 外键 (要在表中设置外键字段 当前表的存储引擎要是innodb才行)

                  子表外键字段的值 要参考父表外键字段的值


存储引擎 执行sql语句一段代码 不同存储引擎存储数据的方式

        和功能都不相同


默认mysqld数据库服务使用的存储引擎是myisam存储引擎


查看数据库服务器当前使用的存储引擎

mysql> show variables like "table_type";

+---------------+--------+

| Variable_name | Value  |

+---------------+--------+

| table_type    | MyISAM |

+---------------+--------+


mysql> show create table t1;   看建表过程


建表是指定表使用的存储引擎

mysql> create table t9(

   -> id int(3)

   -> )engine=innodb;   存储引擎


修改表的存储引擎

mysql> alter table t10  engine=innodb;

                  表名  


设置数据库服务器默认使用的存储引擎vim /etc/my.cnf

vim  /etc/my.cnf

[mysqld]

default-storage-engine=innodb

:wq

# service mysqld restart


在表中建外键字段

1 表使用的存储引擎要是innodb

2 外键字段的类型要匹配

3 作外键的字段要是primary key 或 index 属性

yg_tab

     yg_id  primary key auto_increment  员工编号

     name


mysql> create table keydb.yg_tab(

yg_id int(3) primary key auto_increment,

name varchar(10)

)engine=innodb;



gz_tab

    id 存放工资记录的编号 primarkey key auto_increment

    gz_id 员工编号 index

    gz    float(7,2)


mysql> create table gz_tab( id int(3) primary key auto_increment,

gz_id int(3) not null,

gz float(7,2),

index(gz_id),

foreign key(gz_id) references yg_tab1(yg_id) on update cascade

on delete cascade)engine=innodb;


说明

foreign key(当前表的字段名) references 父表名(父表里的字段名)

on update cascade  子表与父表同步更新

on delete cascade  子表与父表同步删除


数据的导入

数据的导出

查询


用户权限

数据备份与恢复

binlog日志

AB复制

读写分离

mysql集群

搭建LAMP












你可能感兴趣的:(oracle,mysql,软件包,数据库服务)