You are on page 1of 34

Lenguajededefinicindedatos

Unlenguajededefinicindedatos(DataDefinitionLanguage,DDLporsussiglasen
ingls)esunlenguajeproporcionadoporelsistemadegestindebasededatosquepermitea
losusuariosdelamismallevaracabolastareasdedefinicindelasestructurasque
almacenarnlosdatosascomodelosprocedimientosofuncionesquepermitanconsultarlos.
Un Data Definition Language o Lenguaje de descripcin de datos ( DDL ) es un lenguaje
de programacin para definir estructuras de datos . El DDL trmino fue introducido por primera
vez en relacin con el Codasyl modelo de base de datos, donde el esquema de la base de
datos ha sido escrito en un lenguaje de descripcin de datos que describen los registros, los
campos, y "conjuntos" que conforman el usuario modelo de datos . Ms tarde fue usado para
referirse a un subconjunto de SQL, pero ahora se utiliza en un sentido genrico para referirse a
cualquier lenguaje formal para describir datos o estructuras de informacin, como los
esquemasXML.

SQL
A diferencia de muchos lenguajes de descripcin de datos, SQL utiliza una coleccin de
verbos imperativo cuyo efecto es modificar el esquema de la base de datos, aadiendo,
cambiando o eliminando las definiciones de tablas y otros objetos. Estas declaraciones se
pueden mezclar libremente con otras sentencias SQL, por lo que el DDL no es realmente una
lengua independiente. La declaracin ms comn es CREATE TABLE. El lenguaje de
programacin SQL, el ms difundido entre los gestores de bases de datos, admite las
siguientes sentencias de definicin: CREATE, DROP y ALTER, cada una de las cuales se
puedeaplicaralastablas,vistas,procedimientosalmacenadosytriggersdelabasededatos.

MYSQL
Createdatabase
CREATE{DATABASE|SCHEMA}[IFNOTEXISTS]db_name
[create_specification[,create_specification]...]

create_specification:
[DEFAULT]CHARACTERSETcharset_name
|[DEFAULT]COLLATEcollation_name
CREATEDATABASEcreaunabasededatosconelnombredado.ParausarCREATE
DATABASE,necesitaelpermisoCREATEenlabasededatos.

CreateTable
CREATE[TEMPORARY]TABLE[IFNOTEXISTS]tbl_name
[(create_definition,...)]
[table_options][select_statement]

O:
CREATE[TEMPORARY]TABLE[IFNOTEXISTS]tbl_name
[(]LIKEold_tbl_name[)]

create_definition:
column_definition
|[CONSTRAINT[symbol]]PRIMARYKEY[index_type](index_col_name,...)
|KEY[index_name][index_type](index_col_name,...)
|INDEX[index_name][index_type](index_col_name,...)
|[CONSTRAINT[symbol]]UNIQUE[INDEX]
[index_name][index_type](index_col_name,...)
|[FULLTEXT|SPATIAL][INDEX][index_name](index_col_name,...)
|[CONSTRAINT[symbol]]FOREIGNKEY
[index_name](index_col_name,...)[reference_definition]
|CHECK(expr)

column_definition:
col_nametype[NOTNULL|NULL][DEFAULTdefault_value]
[AUTO_INCREMENT][UNIQUE[KEY]|[PRIMARY]KEY]
[COMMENT'string'][reference_definition]

type:
TINYINT[(length)][UNSIGNED][ZEROFILL]
|SMALLINT[(length)][UNSIGNED][ZEROFILL]
|MEDIUMINT[(length)][UNSIGNED][ZEROFILL]
|INT[(length)][UNSIGNED][ZEROFILL]
|INTEGER[(length)][UNSIGNED][ZEROFILL]
|BIGINT[(length)][UNSIGNED][ZEROFILL]
|REAL[(length,decimals)][UNSIGNED][ZEROFILL]
|DOUBLE[(length,decimals)][UNSIGNED][ZEROFILL]
|FLOAT[(length,decimals)][UNSIGNED][ZEROFILL]
|DECIMAL(length,decimals)[UNSIGNED][ZEROFILL]
|NUMERIC(length,decimals)[UNSIGNED][ZEROFILL]
|DATE
|TIME
|TIMESTAMP
|DATETIME
|CHAR(length)[BINARY|ASCII|UNICODE]
|VARCHAR(length)[BINARY]
|TINYBLOB
|BLOB
|MEDIUMBLOB
|LONGBLOB
|TINYTEXT[BINARY]
|TEXT[BINARY]
|MEDIUMTEXT[BINARY]
|LONGTEXT[BINARY]
|ENUM(value1,value2,value3,...)
|SET(value1,value2,value3,...)
|spatial_type

index_col_name:
col_name[(length)][ASC|DESC]

reference_definition:
REFERENCEStbl_name[(index_col_name,...)]
[MATCHFULL|MATCHPARTIAL|MATCHSIMPLE]
[ONDELETEreference_option]
[ONUPDATEreference_option]

reference_option:
RESTRICT|CASCADE|SETNULL|NOACTION

table_options:table_option[table_option]...

table_option:
{ENGINE|TYPE}=engine_name
|AUTO_INCREMENT=value
|AVG_ROW_LENGTH=value
|[DEFAULT]CHARACTERSETcharset_name[COLLATEcollation_name]
|CHECKSUM={0|1}
|COMMENT='string'
|MAX_ROWS=value
|MIN_ROWS=value
|PACK_KEYS={0|1|DEFAULT}
|PASSWORD='string'
|DELAY_KEY_WRITE={0|1}
|ROW_FORMAT={DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}
|RAID_TYPE={1|STRIPED|RAID0}
RAID_CHUNKS=value
RAID_CHUNKSIZE=value
|UNION=(tbl_name[,tbl_name]...)
|INSERT_METHOD={NO|FIRST|LAST}
|DATADIRECTORY='absolutepathtodirectory'
|INDEXDIRECTORY='absolutepathtodirectory'

select_statement:
[IGNORE|REPLACE][AS]SELECT...(Somelegalselectstatement)
CREATETABLEcreaunatablaconelnombredado.DebetenerelpermisoCREATEparalatabla.
PuedeusarlapalabraTEMPORARYalcrearunatabla.UnatablaTEMPORARYesvisiblesloparala
conexinactual,yseborraautomticamentecuandolaconexinsecierra.
MySQLrepresentacadatablamedianteunfichero.frmdeformatodetabla(definicin)enel
directoriodebasededatos.Elmotorparalatablapuedecrearotrosficherostambin.Enel
casodetablasMyISAM,elmotorcreaficherosndiceydedatos.Porlotanto,paracadatabla
MyISAMtbl_name,haytresficherosdedisco:
Fichero Propsito
tbl_name.frm Ficherodeformatodetabla(definicin)
tbl_name.MYD Ficherodedatos
tbl_name.MYI Ficherondice
SinoseespecificaNULLniNOTNULL,lacolumnasetratacomosiseespecificaraNULL
UnacolumnaenterapuedetenerelatributoadicionalAUTO_INCREMENT.Cuandoinserta
unvalordeNULL(recomendado)o0enunacolumnaAUTO_INCREMENTautoindexada,la
columnaseasignaalsiguientevalordesecuencia.Tpicamenteestoesvalue+1,donde
valueeselmayorvalorposibleparalacolumnaenlatabla.Secuencias
AUTO_INCREMENTcomienzancon1.Talescolumnasdebendefinirsecomounodelos
tiposenteros.
LaclusulaDEFAULTespecificaelvalorpordefectoparaunacolumna.Conuna
excepcin,elvalorpordefectodebeserconstantenopuedeserunafuncinouna
expresin.Estosignifica,porejemplo,quenopuedeponercomovalorpordefectode
unacolumnaelvalordeunafuncincomoNOW()oCURRENT_DATE.Laexcepcinesque
pudeespecificarCURRENT_TIMESTAMPcomodefectoparacolumnasTIMESTAMP.
EnMySQL,unndiceUNIQUEesunoenquetodoslosvaloresenelndicedebenser
distintos.Ocurreunerrorsiintentaaadirunnuevoregistroconunaclavequecoincida
conunregistroexistente.Laexcepcinesqueunacolumnaenelndicepuedecontener
valoresNULL,puedecontenervaloresNULLmltiples.
UnaPRIMARYKEYesunaKEYnicadondetodaslascolumnasdelaclavedeben
definirsecomoNOTNULL.SinosedeclaranexplcitamentecomoNOTNULL,MySQLlas
declaraimplcitamente(ysindecirlo).UnatablapuedetenerslounaPRIMARYKEY.

CREATEINDEX
CREATE[UNIQUE|FULLTEXT|SPATIAL]INDEXindex_name
[USINGindex_type]
ONtbl_name(index_col_name,...)

index_col_name:
col_name[(length)][ASC|DESC]
EnMySQL5.0,CREATEINDEXsemapeaauncomandoALTERTABLEparacrearndices.
Unalistadecolumnasdelaforma(col1,col2,...)creaunndicedemltiplescolumnas.Los
valoresdendiceseformanalconcatenarlosvaloresdelascolumnasdadas

DROPDATABASE
DROP{DATABASE|SCHEMA}[IFEXISTS]db_name

DROPDATABASEborrartodaslastablasenlabasededatosyborrarlabasededatos.Seamuy
cuidadosoconestecomando!
IFEXISTSseusaparaevitarunerrorsilabasededatosnoexiste.
ElcomandoDROPDATABASEborrardeldirectoriodebasededatoslosficherosydirectoriosque
MySQLpuedecrearduranteoperacionesnormales:
Todoslosficherosconestasextensiones:
Todoslossubdirectoriosconnombresquetienendosdgitoshexadecimales00ff.
SonsubdirectoriosusadosportablasRAID.(Estosdirectoriosnoseborrandesde
MySQL5.0,cuandoseeliminelsoporteparatablasRAID.Debeconvertirlastablas
RAIDyeliminarestosdirectoriosmanualmenteantesdeactualizaraMySQL5.0.
ConsulteSeccin2.10.1,Aumentarlaversinde4.1a5.0.)
Elficherodb.opt,siexiste.
SipermanecenotrosficherosodirectorioseneldirectoriodelabasededatostrasqueMySQL
borrelosficheroslistados,eldirectoriodebasededatosnopuedeborrarse.Enestecaso,debe
borrarcualquierficherorestantemanualmenteyrealizarelcomandoDROPDATABASEdenuevo.
DROPINDEX
DROPINDEXindex_nameONtbl_name

DROPINDEXborraelndicellamadoindex_namedelatablatbl_name.EnMySQL5.0,DROP
INDEXsemapeaacomandoALTERTABLEparaborrarelndice.

DROPTABLE
DROP[TEMPORARY]TABLE[IFEXISTS]
tbl_name[,tbl_name]...
[RESTRICT|CASCADE]
DROPTABLEborraunaomstablas.DebetenerelpermisoDROPparacadatabla.Todoslos
datosdeladefinicindetablasonborrados,asquetengacuidadoconestecomando!
UseIFEXISTSparaevitarunerrorparatablasquenoexistan.
RESTRICTyCASCADEsepermitenparahacerlaportabilidadmsfcil.Demomento,nohacen
nada.
Nota:DROPTABLEhaceuncommitautomticamenteconlatransaccinactiva,anoserque
uselapalabraTEMPORARY.
LapalabraTEMPORARYtieneelsiguienteefecto:
ElcomandosloborratablasTEMPORARY.
Elcomandonoacabaunatransaccinenmarcha.
Nosechequeanderechosdeacceso.(UnatablaTEMPORARYesvisiblesloparael
clientequelahacreado,asquenoesnecesario.)
UsarTEMPORARYesunabuenaformadeasegurarquenoborraaccidentalmenteunatablano
TEMPORARY.

RENAMETABLE
RENAMETABLEtbl_nameTOnew_tbl_name
[,tbl_name2TOnew_tbl_name2]...

Estecomandorenombraunaomstablas.
ALTERTABLE
ALTER[IGNORE]TABLEtbl_name
alter_specification[,alter_specification]...

alter_specification:
ADD[COLUMN]column_definition[FIRST|AFTERcol_name]
|ADD[COLUMN](column_definition,...)
|ADDINDEX[index_name][index_type](index_col_name,...)
|ADD[CONSTRAINT[symbol]]
PRIMARYKEY[index_type](index_col_name,...)
|ADD[CONSTRAINT[symbol]]
UNIQUE[index_name][index_type](index_col_name,...)
|ADD[FULLTEXT|SPATIAL][index_name](index_col_name,...)
|ADD[CONSTRAINT[symbol]]
FOREIGNKEY[index_name](index_col_name,...)
[reference_definition]
|ALTER[COLUMN]col_name{SETDEFAULTliteral|DROPDEFAULT}
|CHANGE[COLUMN]old_col_namecolumn_definition
[FIRST|AFTERcol_name]
|MODIFY[COLUMN]column_definition[FIRST|AFTERcol_name]
|DROP[COLUMN]col_name
|DROPPRIMARYKEY
|DROPINDEXindex_name
|DROPFOREIGNKEYfk_symbol
|DISABLEKEYS
|ENABLEKEYS
|RENAME[TO]new_tbl_name
|ORDERBYcol_name
|CONVERTTOCHARACTERSETcharset_name[COLLATEcollation_name]
|[DEFAULT]CHARACTERSETcharset_name[COLLATEcollation_name]
|DISCARDTABLESPACE
|IMPORTTABLESPACE
|table_options
ALTERTABLElepermitecambiarlaestructuradeunatablaexistente.Porejemplo,puedeaadir
oborrarcolumnas,crearodestruirndices,cambiareltipodecolumnasexistentes,o
renombrarcolumnasolamismatabla.Puedecambiarelcomentariodelatablaysutipo.
Lasintaxisparavariasdelasalteracionespermitidasessimilaraclusulasdelcomando
CREATETABLE.
ALTERTABLEfuncionacreandounacopiatemporaldelatablaoriginal.Laalteracinserealiza
enlacopia,luegolatablaoriginalseborrayserenombralanueva.MientrasseejecutaALTER
TABLElatablaoriginaleslegibleporotrosclientes.Lasactualizacionesyescriturasenlatabla
seesperanhastaquelanuevatablaestlista,luegoseredirigenautomticamentealanueva
tablasinningunaactualizacinfallida.

TRANSACCIONES

UnatransaccinesunaunidadlgicadetrabajoquecomprendeunaomssentenciasSQL
queseejecutanporunsolousuario.DeacuerdoaestndarSQLANSI/ISO,unatransaccin
iniciaconlaprimerinstruccindeSQLejecutabledelusuario.Unatransaccinterminacuando
esexplcitamenteconfirmadaosedeshaceporelusuario.
El manejo de transacciones permite al usuario garantizar cambios consistentes en los datos,
siempre y cuando las sentencias SQL en una transaccin son agrupadas lgicamente. Una
transaccin debe constar de todas las piezas necesarias para una una unidad lgica de trabajo
ni ms, ni menos. Los datos de todas las tablas referenciadas estn en un estado consistente
antesquelatransaccininiciaydespusquelatransaccintermina.
Considerandounabasededatosdeunbanco.Cuandounclientedelbancotransfieredinerode
unacuentadeahorroaunacuentadecheques,latransaccinpuedeconsistirdetres
operacionesseparadas:
1. decrementarlacuentadeahorros
2. incrementarlacuentadechequesy,
3. registrarlatransaccineneldiariodetransacciones.
Al ejecutar la transaccin, todas las acciones deben fracasar o tener xito juntas. Otras
acciones no relacionadas, tales como un nuevo depsito a una cuenta, no debe ser includo en
la transaccin de transferencia de fondos. Tales instrucciones deben ser parte de otras
transacciones.

Confirmar (commit) una transaccin hace permanentes los cambios resultado de sentencias
DML en una transaccin. Los cambios hechos por sentencias SQL de una transaccin se
hacen visibles a cualquiera de las sentencias de otros usuarios (o sesiones) cuya ejecucin
iniciadespusquelatransaccinesconfirmada.

Deshacer una transaccin retrae cualquier cambio resultado de las sentencias SQL en la
transaccin. Depus que una transaccin es deshecha, los datos afectados se dejan sin
cambios,comosilassentenciasSQLnuncasehubieranejecutado.

TransaccionesyoperacionesatmicasenSQL.
MySQL Server (versiones 3.23max y todas las versiones 4.0 y posteriores) soportan
transacciones con los motores trasaccionales InnoDB y BDB . InnoDB proporciona completa
compatibilidadACID
Los otros motores no transaccionales en MySQL Server (como MyISAM) siguen un paradigma
diferente para integridad de datos llamado "operaciones atmicas". En trminos
transaccionales, tablas MyISAM operan en modo AUTOCOMMIT=1. Operaciones atmicas a
menudoofrecenintegridadcomparableconmejorrendimiento.

MySQL Server soporta ambos paradigmas, puede decidir si su aplicacin necesita la velocidad
de operaciones atmicas o el uso de caractersticas transaccionales. Esta eleccin puede
hacerseparacadatabla.
Como se ha dicho, el compromiso entre tipos de tablas transaccionales y no transaccionales
reside principalmente en el rendimiento. Tablas transaccionales tienen requerimientos
significativamente mayores para memoria y espacio de disco, y mayor carga de CPU. Por otra
parte, tipos de tablas transaccionales como InnoDB tambin ofrece muchas caractersticas
significativas. El diseo modular de MySQL Server permite el uso concurrente de distintos
motores de almacenamiento para cumplir distintos requerimientos y mostrarse ptimo en todas
lassituaciones.

5.5Manipulacindelabasededatos(INSERT,UPDATE,DELETE)
INSERTinsertanuevosregistrosenunatablaexistente.LasformasINSERT...VALUESy
INSERT...SETdelcomandoinsertanregistrosbasadosenvaloresexplcitamente
especificados

INSERT[LOW_PRIORITY|DELAYED|HIGH_PRIORITY][IGNORE]
[INTO]tbl_name[(col_name,...)]
VALUES({expr|DEFAULT},...),(...),...
[ONDUPLICATEKEYUPDATEcol_name=expr,...]
O:
INSERT[LOW_PRIORITY|DELAYED|HIGH_PRIORITY][IGNORE]
[INTO]tbl_name
SETcol_name={expr|DEFAULT},...
[ONDUPLICATEKEYUPDATEcol_name=expr,...]
O:
INSERT[LOW_PRIORITY|HIGH_PRIORITY][IGNORE]
[INTO]tbl_name[(col_name,...)]
SELECT...
[ONDUPLICATEKEYUPDATEcol_name=expr,...]
INSERTinsertanuevosregistrosenunatablaexistente.LasformasINSERT...VALUESy
INSERT...SETdelcomandoinsertanregistrosbasadosenvaloresexplcitamente
especificados.
tbl_nameeslatablaenquelosregistrosdebeninsertarse.Lascolumnasparalasqueel
comandoproporcionavalorespuedenespecificarsecomosigue:
LalistadenombresdecolumnaolaclusulaSETindicanlascolumnasexplcitamente.
SinoespecificalalistadecolumnasparaINSERT...VALUESoINSERT...SELECT,los
valoresparacadacolumnaenlatabladebenproporcionarseenlalistaVALUESoporel
SELECT.Sinosabeelordendelascolumnasenlatabla,useDESCRIBEtbl_namepara
encontrarlo.
Losvaloresdecolumnapuedendarsededistintosmodos:
Sinoestejecutandoelmodoestricto,cualquiercolumnaquenotengaunvalorasignado
explcitamenterecibesuvalorpordefecto(explcitooimplcito).Porejemplo,siespecificauna
listadecolumnasquenonombratodaslascolumnasenlatabla,lasnonombradasrecibensus
valorespordefecto.
UseDEFAULTparaasignaraunacolumnaexplcitamentesuvalorpordefecto.Estohacems
fcilescribircomandosINSERTqueasignanvaloresatodaslascolumnasexceptounaspocas,
yaquelepermiteevitarlaescrituradeunalistadevaloresVALUESincompleta.Deotromodo,
tendraqueescribirlalistadelosnombresdecolumnacorrespondientesacadavalorenlalista
VALUES
SilalistadecolumnasylalistaVALUESestnvacas,INSERTcreaunregistroconcada
conjuntodecolumnasconsusvalorespordefecto:
omysql>INSERTINTOtbl_name()VALUES()
DELETEborralosregistrosdetbl_namequesatisfacenlacondicindadaporwhere_definition,
yretornaelnmeroderegistrosborrados.

SirealizauncomandoDELETEsinclusulaWHEREseborrantodoslosregistros.Unaforma
msrpidadehacerlo,cuandonoquieresaberelnmeroderegistrosborrados,seusa
TRUNCATETABLE.
SiespecificaLOW_PRIORITY,laejecucindeDELETEseretardahastaquenohayms
clientesleyendodelatabla.
ParatablasMyISAM,siusalapalabraQUICK,elmotordealmacenamientonomezclalas
hojasdelndiceduranteelborrado,quepuedeaceleraralgunostiposdeoperacionesde
borrado.
EnMySQL5.0,lapalabraclaveIGNOREhacequeMySQLignoretodosloserroresduranteel
procesodeborrarregistros.(Loserroresencontradosdurantelaetapadeparseoseprocesan
delaformahabitual.)Loserroresqueseignorandebidoalusodeestaopcinseretornancomo
advertencias.
Sintaxisparaunatabla:
DELETE[LOW_PRIORITY][QUICK][IGNORE]FROMtbl_name
[WHEREwhere_definition]
[ORDERBY...]
[LIMITrow_count]
Sintaxisparamltiplestablas:
DELETE[LOW_PRIORITY][QUICK][IGNORE]
tbl_name[.*][,tbl_name[.*]...]
FROMtable_references
[WHEREwhere_definition]

O:
DELETE[LOW_PRIORITY][QUICK][IGNORE]
FROMtbl_name[.*][,tbl_name[.*]...]
USINGtable_references
[WHEREwhere_definition]

ElcomandoUPDATEactualizacolumnasenregistrosdetablaexistentesconnuevosvalores.La
clusulaSETindicaqucolumnamodificarylosvaloresquepuederecibir.LaclusulaWHERE,
siseda,especificaquregistrosdebenactualizarse.Deotromodo,seactualizantodoslos
registros.SilaclusulaORDERBYseespecifica,losregistrosseactualizanenelordenquese
especifica.LaclusulaLIMITesellmitederegistrosaactualizar.
Siaccedeaunacolumnadetbl_nameenunaexpresin,UPDATEusaelvaloractualdela
columna.Porejemplo,elsiguientecomandoponelacolumnaageaunomsquesuvalor
actual:
mysql>UPDATEpersondataSETage=age+1
LasasignacionesUPDATEseavalnadeizquierdaaderecha.Porejemplo,elsiguiente
comandodoblalacolumnaageyluegolaincrementa:
mysql>UPDATEpersondataSETage=age*2,age=age+1
Siponeenunacolumnaelvalorquetieneactualmente,MySQLsedacuentaynolaactualiza.
UPDATEretornaelnmeroderegistrosquesecambian.
PuedeusarLIMITrow_countpararestringirelalcancedelUPDATE.UnaclusulaLIMITesuna
restriccinderegistroscoincidentes.Elcomandoparaencuantoencuentrarow_countregistos
quesatisfaganlaclusulaWHERE,tantosihansidocambiadoscomosino.
SiuncomandoUPDATEincluyeunaclusulaORDERBY,losregistrosseactualizanenelorden
especificadoporlaclusula.
PuederealizaroperacionesUPDATEquecubranvariastablas.Lapartetable_referenceslistalas
tablasinvolucradaseneljoin.
ejemplo:
UPDATEitems,monthSETitems.price=month.price
WHEREitems.id=month.id
Sintaxisparaunatabla:
UPDATE[LOW_PRIORITY][IGNORE]tbl_name
SETcol_name1=expr1[,col_name2=expr2...]
[WHEREwhere_definition]
[ORDERBY...]
[LIMITrow_count]
Sintaxisparamltiplestablas:
UPDATE[LOW_PRIORITY][IGNORE]table_references
SETcol_name1=expr1[,col_name2=expr2...]
[WHEREwhere_definition]

Vistas
ApartirdeunconjuntodevarrelscomoDEPTOyEMP,yunconjuntodevaloresderelacinde
stas,lasexpresionesrelacionalesnospermitenobtenerotrosvaloresderelacinapartirde
losyadados(porejemplo,juntandodosdelasvarrelsdadas).Alasvarrelsoriginales(dadas)
selesdenominavarrelsbaseyasusvaloresderelacinselesllamarelacionesbaseauna
relacinqueesoquepuedeserobtenidaapartirdedichasrelacionesbasepormediode
algunaexpresinrelacional,seledenominarelacinderivadaoderivable

Lossistemasrelacionalestienenobviamentequeproporcionarunmedioparacrearlasvarrels
base.Porejemplo,enSQLestatareaesrealizadapormediodelainstruccinCREATETABLE

Lossistemasrelacionalestambinmanejanotrotipodevarrelconnombre,denominadavista,
cuyovalorencualquiermomentodadoesunarelacinderivada(dedondesepuedeimaginar
unavista,agrandesrasgos,comounavarrelderivada).Elvalordeunavistadeterminadaenun
momentodado,escualquieraqueseaelresultadodeevaluarciertaexpresinrelacionalenese
momentodichaexpresinrelacionalesespecificadaenelmomentodequesecrealavistaen
cuestin.

CREATEVIEWEMPSUPAS
(EMPWHERESALARIO>33K){EMP#,NOMEMP,SALARIO}

Cuandoestainstruccinesejecutada,laexpresinrelacionalquesigueaASlaexpresin
quedefinelavistanoesevaluada,sinoqueelsistemasimplementela"recuerda"dealguna
manera(dehecho,guardndolaenelcatlogobajoelnombreespecificadoEMPSUP).

Ahoraescomosienrealidadfueseunavarreldelabasededatos,denominadaEMPSUP
Yelusuariodebepoderoperarsobreesavistatalcomosifueraunavarrelbase.

PodramospensarenEMPSUPcomounavarrelvirtualesdecir,unavarrelqueaparentemente
existeporderechopropio,peroquedehechonoexiste(suvalor,encualquiermomentodado,
dependedelosvaloresdeotrasvarelsdeterminadas).

AunquedecimosqueelvalordeEMPSUPeslarelacinqueresultarasiseevaluarala
expresindedefinicindelavista,nopretendemossugerirqueahoratenemosunacopia
independientedelosdatosesdecir,nopretendemossugerirqueseevalerealmentela
expresindedefinicindelavista.Alcontrario,lavistaesenefectoslounaventanahaciael
interiordelavarrelbaseEMP.Comoconsecuencia,todocambioaesavarrelsubyacenteser
visibledemaneraautomticaeinstantneaatravsdeesaventana.
Unadefinicindevistapuedeserdeunacomplejidadarbitraria,yaqueenesencia
esslounaexpresinrelacionalconnombre(puedeinclusoreferirseaotrasvistas).

Lasvistas"noexistenrealmente",sinoquesloproporcionandiferentesformasdevera"los
datosreales".

Aviewisalogicalrepresentationofoneormoretables.Inessence,aviewisastoredquery.A
viewderivesitsdatafromthetablesonwhichitisbased,calledbasetables.Basetablescanbe
tablesorotherviews.Alloperationsperformedonaviewactuallyaffectthebasetables.Youcan
useviewsinmostplaceswheretablesareused.

Viewsenableyoutotailorthepresentationofdatatodifferenttypesofusers.Viewsareoften
usedto:
Provideanadditionalleveloftablesecuritybyrestrictingaccesstoapredeterminedset
ofrowsorcolumnsofatable
Hidedatacomplexity
Forexample,asingleviewcanbedefinedwithajoin,whichisacollectionofrelated
columnsorrowsinmultipletables.However,theviewhidesthefactthatthisinformation
actuallyoriginatesfromseveraltables.Aquerymightalsoperformextensivecalculations
withtableinformation.Thus,userscanqueryaviewwithoutknowinghowtoperforma
joinorcalculations.
Presentthedatainadifferentperspectivefromthatofthebasetable
Forexample,thecolumnsofaviewcanberenamedwithoutaffectingthetableson
whichtheviewisbased.
Isolateapplicationsfromchangesindefinitionsofbasetables
Unlikeatable,aviewisnotallocatedstoragespace,nordoesaviewcontaindata.Rather,a
viewisdefinedbyaquerythatextractsorderivesdatafromthebasetablesreferencedbythe
view.Becauseaviewisbasedonotherobjects,itrequiresnostorageotherthanstorageforthe
querythatdefinestheviewinthedatadictionary.
Aviewhasdependenciesonitsreferencedobjects,whichareautomaticallyhandledbythe
database.Forexample,ifyoudropandrecreateabasetableofaview,thenthedatabase
determineswhetherthenewbasetableisacceptabletotheviewdefinition.
HowDataIsAccessedinViews
OracleDatabasestoresaviewdefinitioninthedatadictionaryasthetextofthequerythat
definestheview.WhenyoureferenceaviewinaSQLstatement,OracleDatabaseperforms
thefollowingtasks:
1. Mergesaquery(wheneverpossible)againstaviewwiththequeriesthatdefinetheview
andanyunderlyingviews
2. OracleDatabaseoptimizesthemergedqueryasifyouissuedthequerywithout
referencingtheviews.Therefore,OracleDatabasecanuseindexesonanyreferenced
basetablecolumns,whetherthecolumnsarereferencedintheviewdefinitionorinthe
userqueryagainsttheview.
3. SometimesOracleDatabasecannotmergetheviewdefinitionwiththeuserquery.In
suchcases,OracleDatabasemaynotuseallindexesonreferencedcolumns.
4. ParsesthemergedstatementinasharedSQLarea
5. OracleDatabaseparsesastatementthatreferencesaviewinanewsharedSQLarea
onlyifnoexistingsharedSQLareacontainsasimilarstatement.Thus,viewsprovidethe
benefitofreducedmemoryuseassociatedwithsharedSQL.
6. ExecutestheSQLstatement
AjoinviewisdefinedasaviewthathasmultipletablesorviewsinitsFROMclause.
Anupdatablejoinview,alsocalledamodifiablejoinview,involvestwoormorebasetables
orviewsandpermitsDMLoperations.Anupdatableviewcontainsmultipletablesinthetoplevel
FROMclauseoftheSELECTstatementandisnotrestrictedbytheWITHREADONLYclause.
Tobeinherentlyupdatable,aviewmustmeetseveralcriteria.Forexample,ageneralruleisthat
anINSERT,UPDATE,orDELETEoperationonajoinviewcanmodifyonlyonebasetableatatime.

InstruccionesparalaadministracindeVistas

CREATEVIEW
ALTERVIEW
DROPVIEW
SHOWCREATEVIEW
selectDBMS_METADATA.GET_DDL('VIEW','TEST')fromDUAL

Crearunavista:
UsetheCREATEVIEWstatementtodefineaview.
Prerequisites
Tocreateaviewinyourownschema,youmusthavetheCREATEVIEWsystemprivilege.To
createaviewinanotheruser'sschema,youmusthavetheCREATEANYVIEWsystem
privilege.
Theowneroftheschemacontainingtheviewmusthavetheprivilegesnecessarytoeither
select,insert,update,ordeleterowsfromallthetablesorviewsonwhichtheviewisbased.The
ownermustbegrantedtheseprivilegesdirectly,ratherthanthrougharole.

ORREPLACE

SpecifyORREPLACEtorecreatetheviewifitalreadyexists.Youcanusethisclauseto
changethedefinitionofanexistingviewwithoutdropping,recreating,andregrantingobject
privilegespreviouslygrantedonit.

FORCE

SpecifyFORCEifyouwanttocreatetheviewregardlessofwhetherthebasetablesoftheview
orthereferencedobjecttypesexistortheowneroftheschemacontainingtheviewhas
privilegesonthem.TheseconditionsmustbetruebeforeanySELECT,INSERT,UPDATE,or
DELETEstatementscanbeissuedagainsttheview.
NOFORCE

SpecifyNOFORCEifyouwanttocreatetheviewonlyifthebasetablesexistandtheownerof
theschemacontainingtheviewhasprivilegesonthem.Thisisthedefault.

CREATEVIEWemp_viewAS
SELECTlast_name,salary*12annual_salary
FROMemployees
WHEREdepartment_id=20

EjemplosobreVISTAS,conlatabladefamilia:

mysql>descfamilia
>
+++++++
|Field |Type |Null|Key|Default|Extra|
+++++++
|Nmienbro |tinyint(2)|NO|PRI|0 | |
|PRIMER_APELLIDO|varchar(25)|YES| |NULL| |
|SEGUNDO_APELLIDO|varchar(25)|YES| |NULL| |
|NOMBRE |varchar(30)|YES||NULL| |
|IDPADRE |tinyint(2)|YES| |NULL| |
|IDMADRE |tinyint(2)|YES| |NULL| |
|GENERO |varchar(1)|YES| |NULL| |
+++++++
7rowsinset(0.00sec)

selectfh.Nmienbro,fh.PRIMER_APELLIDO,fh.SEGUNDO_APELLIDO,fh.NOMBRE,
fh.IDPADRE,fp.NOMBREfromfamiliafh,familiafpwherefh.IDPADRE=fp.Nmienbro

mysql>CREATEORREPLACEVIEWparentescoAS(selectapers.idIDPERS,
apers.NombreNOMBREPERS,apers.Apellido1AP1PERS,apapa.idIDPAPA,apapa.Nombre
NOMBREPAPA,apers.idmadreIDMAMA,amadre.nombreNOMBRMAMAfromarbolapers
LEFTJOINarbolapapaON(apers.idpadre=apapa.id)LEFTJOINarbolamadreON
(apers.idmadre=amadre.Id))

SintaxisdeGRANTyREVOKE
GRANTpriv_type[(column_list)][,priv_type[(column_list)]]...
ON[object_type]{tbl_name|*|*.*|db_name.*}
TOuser[IDENTIFIEDBY[PASSWORD]'password']
[,user[IDENTIFIEDBY[PASSWORD]'password']]...
[REQUIRE
NONE|
[{SSL|X509}]
[CIPHER'cipher'[AND]]
[ISSUER'issuer'[AND]]
[SUBJECT'subject']]
[WITHwith_option[with_option]...]

object_type=
TABLE
|FUNCTION
|PROCEDURE

with_option=
GRANTOPTION
|MAX_QUERIES_PER_HOURcount
|MAX_UPDATES_PER_HOURcount
|MAX_CONNECTIONS_PER_HOURcount
|MAX_USER_CONNECTIONScount

REVOKEpriv_type[(column_list)][,priv_type[(column_list)]]...
ON[object_type]{tbl_name|*|*.*|db_name.*}
FROMuser[,user]...

REVOKEALLPRIVILEGES,GRANTOPTIONFROMuser[,user]...

LoscomandosGRANTyREVOKEpermitenalosadministradoresdesistemascrearcuentasde
usuarioMySQLydarlespermisosyquitarlosdelascuentas.
LainformacindecuentadeMySQLsealmacenaenlastablasdelabasededatosmysql.
Silastablasdepermisostienenregistrosdepermisosquecontienennombresdetablaso
basesdedatosconmaysculasyminsculasylavariabledesistema
lower_case_table_namesestactiva,REVOKEnopuedeusarseparaquitarlospermisos.Es
necesariomanipularlastablasdepermisosdirectamente.(GRANTnocrearestosregistros
cuandoestactivolower_case_table_names,perotalesregistrospuedenhabersecreado
prviamenteaactivarlavariable.)
Lospermisospuedendarseenvariosniveles:
Nivelglobal
Lospermisosglobalesseaplicanatodaslasbasesdedatosdeunservidordado.
Estospermisossealmacenanenlatablamysql.user.GRANTALLON*.*yREVOKE
ALLON*.*otorganyquitanslopermisosglobales.
Niveldebasededatos
Lospermisosdebasededatosseaplicanatodoslosobjetosenunabasededatos
dada.Estospermisossealmacenanenlastablasmysql.dbymysql.host.GRANT
ALLONdb_name.*yREVOKEALLONdb_name.*otorganyquitanslopermisosde
basesdedatos.
Niveldetabla
Lospermisosdetablaseaplicanatodaslascolumnasenunatabladada.Estos
permisossealmacenanenlatablamysql.tables_priv.GRANTALLON
db_name.tbl_nameyREVOKEALLONdb_name.tbl_nameotorganyquianpermisos
slodetabla.
Niveldecolumna
Lospermisosdecolumnaseaplicanacolumnasenunatabladada.Estospermisos
sealmacenanenlatablamysql.columns_priv.UsandoREVOKE,debeespecificar
lasmismascolumnasqueseotorgaronlospermisos.
Nivelderutina
LospermisosCREATEROUTINE,ALTERROUTINE,EXECUTE,yGRANTseaplicana
rutinasalmacenadas.Puedendarseanivelesglobalydebasededatos.Adems,
exceptoparaCREATEROUTINE,estospermisospuedendarseennivelderutinaspara
rutinasindividualesysealmacenanenlatablamysql.procs_priv.
Laclusulaobject_typeseaadienMySQL5.0.6.DebeespecificarsecomoTABLE,
FUNCTION,oPROCEDUREcuandoelsiguienteobjetoesunatabla,unafuncinalmacenada,oun
procedimientoalmacenado.Parausarestaclusulacuandoactualicedeunaversinanteriorde
MySQLala5.0.6,debeactualizarlastablasdepermisos.ConsulteSeccin2.10.2,Aumentar
laversindelastablasdeprivilegios.
ParausarGRANToREVOKE,debetenerelpermisoGRANTOPTION,ydebetenerlospermisos
queestdandooquitando.
Parahacerfcildequitartodoslospermisos,MySQL5.0tienelasiguientesintaxis,queborra
todoslospermisosglobales,deniveldebasededatosydeniveldetablaparalosusuarios
nombrados:
REVOKEALLPRIVILEGES,GRANTOPTIONFROMuser[,user]...

ParausarestasintaxisREVOKE,debetenerelpermisoCREATEUSERglobaloelpermisoUPDATE
paralabasededatosmysql.
ParaloscomandosGRANTyREVOKE,priv_typepuedenespecificarsecomocualquieradelos
siguientes:
Permiso Significado
ALL
[PRIVILEGES
]
DatodoslospermisossimplesexceptoGRANTOPTION
ALTER PermiteelusodeALTERTABLE
ALTER
ROUTINE
Modificaoborrarutinasalmacenadas
CREATE PermiteelusodeCREATETABLE
CREATE
ROUTINE
Crearutinasalmacenadas
CREATE
TEMPORARY
TABLES
PermiteelusodeCREATETEMPORARYTABLE
CREATEUSER
PermiteelusodeCREATEUSER,DROPUSER,RENAMEUSER,yREVOKEALL
PRIVILEGES.
CREATEVIEW PermiteelusodeCREATEVIEW
DELETE PermiteelusodeDELETE
DROP PermiteelusodeDROPTABLE
EXECUTE Permitealusuarioejecutarrutinasalmacenadas
FILE PermiteelusodeSELECT...INTOOUTFILEyLOADDATAINFILE
INDEX PermiteelusodeCREATEINDEXyDROPINDEX
INSERT PermiteelusodeINSERT
LOCKTABLES PermiteelusodeLOCKTABLESentablasparalasquetengaelpermisoSELECT
PROCESS PermiteelusodeSHOWFULLPROCESSLIST
REFERENCES Noimplementado
RELOAD PermiteelusodeFLUSH
REPLICATION
CLIENT
Permitealusuariopreguntardndeestnlosservidoresmaestrooesclavo
REPLICATION
SLAVE
Necesarioparalosesclavosdereplicacin(paraleereventosdellogbinariodesde
elmaestro)
SELECT PermiteelusodeSELECT
SHOW
DATABASES
SHOWDATABASESmuestratodaslasbasesdedatos
SHOWVIEW PermiteelusodeSHOWCREATEVIEW
SHUTDOWN Permiteelusodemysqladminshutdown
SUPER
PermiteelusodecomandosCHANGEMASTER,KILL,PURGEMASTERLOGS,
andSETGLOBAL,elcomandomysqladmindebuglepermiteconectar(una
vez)inclusosisellegaamax_connections
UPDATE PermiteelusodeUPDATE
USAGE Sinnimodenoprivileges
GRANT
OPTION
Permitedarpermisos
ElpermisoEXECUTEnoesoperacionalhastaMySQL5.0.3.CREATEVIEWySHOWVIEWse
aadieronenMySQL5.0.1.CREATEUSER,CREATEROUTINE,yALTERROUTINEseaadieronen
MySQL5.0.3.ParausarestospermisosalactualizardesdeunaversinanteriordeMySQLque
nolostenga,debeactualizarprimerolastablasdepermisos,comosedescribeenSeccin
2.10.2,Aumentarlaversindelastablasdeprivilegios.
ElpermisoREFERENCESactualmentenoseusa.
USAGEpuedeespecificarsecuandoquierecrearunusuariosinpermisos.
UseSHOWGRANTSparadeterminarqupermisostienelacuenta.ConsulteSeccin13.5.4.10,
SintaxisdeSHOWGRANTS.
PuedeasignarpermisosglobalesusandosintaxisON*.*opermisosaniveldebasededatos
usandolasintaxisONdb_name.*.SiespecificaON*ytieneseleccionadaunabasededatospor
defecto,lospermisossedanenesabasededatos.(Atencin:SiespecificaON*ynoha
seleccionadounabasededatospordefecto,lospermisosdadossonglobales.)
LospermisosFILE,PROCESS,RELOAD,REPLICATIONCLIENT,REPLICATIONSLAVE,SHOW
DATABASES,SHUTDOWN,ySUPERsonpermisosadministrativosqueslopuedendarse
globalmente(usandosintaxisON*.*).
Otrospermisospuedendarseglobalmenteoanivelesmsespecficos.
Losnicosvalorespriv_typequepuedeespecificarparaunatablasonSELECT,INSERT,
UPDATE,DELETE,CREATE,DROP,GRANTOPTION,INDEX,yALTER.
Losnicosvalorespriv_typequepuedeespecificarparaunacolumna(cuandousalaclusula
column_list)sonSELECT,INSERT,yUPDATE.
Losnicosvalorespriv_typequepuedeespecificaranivelderutinasonALTERROUTINE,
EXECUTE,yGRANTOPTION.CREATEROUTINEnoesunpermisodenivelderutinaporquedebe
tenerestepermisoparasercapazdecrearunarutinaenprimerlugar.
Paralosnivelesglobal,basededatos,tablayrutina,GRANTALLasignaslolospermisosque
existenenelnivelqueestotorgndolos.Porejemplo,siusaGRANTALLONdb_name.*,este
esuncomandodeniveldebasededatos,asqueningunodelospermisosnicamente
globalestalescomoFILEseotorgan.
MySQLlepermitedarpermisosinclusoenobjetosdebasesdedatosquenoexisten.Entales
casos,lospermisosadardebenincluirelpermisoCREATE.Esteeselcomportamiento
diseado,ysepretendepermitiraladministradordelabasededatosperpararcuentasde
usuarioypermisosparaobjetosdebasededatosquesecrearnposteriormente.
MySQLnoeliminaautomticamentenignpermisosiborraunatablaobasededatos.Siborra
unrutina,sequitacualquierpermisodadoanivelderutinaparalamisma.
Nota:loscarcterscomodn'_'y'%'sepermitenalespecificarnombresdebasededatosen
comandosGRANTqueotorganpermisosanivelglobalodebasededatos.Estosignifica,por
ejemplo,quesiquiereusaruncarcter'_'comopartedeunnombredebasededatos,debe
especificarlocomo'\_'enelcomandoGRANT,paraevitarqueelusuarioseacapazdeacceder
abasesdedatosadicionalesquecoincidanconelpatrndeloscomodines,porejemploGRANT
...ON`foo\_bar`.*TO....
Paraacomodarlospermisosalosusuariosdeequiposarbitrrios,MySQLsoportaespecificar
elvaloruserconlaformauser_name@host_name.Siunvaloruser_nameohost_nameeslegal
comoidentificadorsinponerentrecomillas,nonecesitahacerlo.Sinembargo,lascomillasson
necesariasparaespecificarunacadenauser_nameconteniendocaracteresespeciales(tales
como''),ounacadenahost_nameconteniendocaracteresespecialesocomodn(talescomo
'%')porejemplo,'testuser'@'testhostname'.Entrecomilleelnombredeusuarioyde
equiposeparadamente.
Puedeespecificarcaracterescomodnenelnombredeequipo.Porejemplo,
user_name@'%.loc.gov'seaplicaauser_nameparacualquierequipoeneldominioloc.gov,
yuser_name@'144.155.166.%'seaplicaauser_nameparacualquierequipoenlaclasesubred
claseC144.155.166.
Laformasimpleuser_nameessinnimodeuser_name@'%'.
MySQLnosoportacomodinesenelnombredeusuario.Losusuariosannimossedefinien
insertandoentradasconUser=''enlatablamysql.userocreandounusuarioconunnombre
vacoconelcomandoGRANT:
mysql>GRANTALLONtest.*TO''@'localhost'...

Alespecificarvaloresdelimitados,usecomillassimplesparadelimitarlosnombresdebasesde
datos,tabla,columnayderutina('`').Paralosnombresdeequipo,nombresdeusuario,y
contraseascomocadenas,useapstrofes(''').
Advertencia:Sipermiteconectarconelservidorausuariosannimos,debedarpermisosa
todoslosusuarioslocalescomouser_name@localhost.Deotromodo,lacuentadeusuario
annimoparalocalhostenlatablamysql.user(creadadurantelainstalacindeMySQL)se
usacuandolosusuarioaconnombreintentanloguearconelservidorMySQLdesdelamquina
local.
Puededeterminarsiestoseaplicaasusistemaejecutandolasiguienteconsulta,quelista
cualquierusuarioannimo:
mysql>SELECTHost,UserFROMmysql.userWHEREUser=''

Siquiereborrarlacuentaannimalocalparaevitarelproblemadescrito,useestoscomandos:
mysql>DELETEFROMmysql.userWHEREHost='localhost'ANDUser=''
mysql>FLUSHPRIVILEGES

GRANTsoportanombresdeequipodehasta60caracteres.Losnombresdebasesdedatos,
tablas,columnasyrutinaspuedentenerhasta64caracteres.Losnombresdeusuariopueden
tenerhasta16caracteres.Losnombresdeusuariopuedentenerhasta16caracteres.Estos
lmitesestnharcodeadosenelsoftwareMySQLynopuedencambiarsealterandolastablas
depermisos.
LospermisosparaunatablaocolumnaseformandeformaaditivacomounaORlgicadelos
permisosencadaunodeloscuatronivelesdepermisos.Porejemplo,silatablamysql.user
especificaqueunusuariotieneunpermisoSELECTglobal,elpermisonopuededenegarse
medianteunaentradaenelniveldebasededatos,tablaocolumna.
Lospermisosdeunacolumnapuedencalcularsecomosigue:
globalprivileges
OR(databaseprivilegesANDhostprivileges)
ORtableprivileges
ORcolumnprivileges

Enlamayoradecasos,puededarderechoaaunusuarioenslounodelosnivelesde
permisos,asquelavidanormalmentenoestancomplicada.Losdetallesdeeste
procedimientodechequeodepermisossepresentanenSeccin5.6,Elsistemadeprivilegios
deaccesodeMySQL.
Siotorgapermisosparaunacombinacinusuario/equipoquenoexisteenlatablamysql.user
seaadeunaentradaquepermiteallhastaqueseborraconuncomandoDELETE.Enotras
palabras,GRANTpuedecrearentradasuserperoREVOKEnolosborradebehacerlo
explcitamenteusandoDROPUSERoDELETE.
Sisecreaunnuevousuarioositienepermisosglobalesparaotorgarpermisos,lacontrasea
deusuariosecambiaconlacontraseaespecificadaporlaclusulaIDENTIFIEDBY,siseda
una.Sielusuarioyatieneunacontrasea,estasereemplazaporlanueva.
Atencin:SicreaunnuevousuarioperonoespecificaunaclusulaIDENTIFIEDBY,elusuario
notienecontrasea.Estoesmuypocoseguro.DesdeMySQL5.0.2,puedeactivarelmodo
SQLNO_AUTO_CREATE_USERparaevitarqueGRANTcreeunnuevousuariosilohiciesedeotro
modo,anoserqueIDENTIFIEDBYsedeparaproporcionarlanuevacontraseadeusuario.
LascontraseaspuedenponerseconelcomandoSETPASSWORD.ConsulteSeccin13.5.1.5,
SintaxisdeSETPASSWORD.
EnlaclusulaIDENTIFIEDBY,lacontraseadebedarsecomoelvalordecontrasealiteral.
NoesnecesariousarlafuncinPASSWORD()comoloesparaelcomandoSETPASSWORD.Por
ejemplo:
GRANT...IDENTIFIEDBY'mypass'

SinoquiereenviarlacontraseaentextoplanoyconoceelvalorhaseadoquePASSWORD()
retornaraparalacontrasea,puedeespecificarelvalorhasheadoprecedidoporlapalabra
clavePASSWORD:
GRANT...
IDENTIFIEDBYPASSWORD'*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4'

EnunprogramaC,puedeobtenerelvalorhaseadousandolafuncin
make_scrambled_password()delaAPIdeC.
Sidapermisosparaunabasededatos,secreaunaentradaenlatablamysql.dbsies
necesario.SitodoslospermisosparalabasededatosseeliminanconREVOKE,estaentradase
borra.
Siunusuarionotienepermisosparaunatabla,elnombredetablanosemuestracuandoel
usuariopideunalistadetalbas(porejemplo,conelcomandoSHOWTABLES).
ElpermisoSHOWDATABASESlepermitealacuentavernombresdebasesdedatosrealizando
elcomandoSHOWDATABASE.Lascuentasquenotienenestepermisoslovenlasbasesde
datosparalasquetienenalgnpermiso,ynopuedenusarelcomandoparanadasielservidor
searrancaconlaopcinskipshowdatabase.
LaclusulaWITHGRANTOPTIONledaalusuariolahabilidadparadaraotrosusuarioscualquier
permisoquetengaelusuarioenelniveldepermisoespecificado.Debetenercuidadodea
quindaelpermisoGRANTOPTION,yaquedosusuariosconpermisosdistintospuedenser
capacesdejuntarpermisos!
NopuededaraotrousuariounpermisoquenotengaustedmismoelpermisoGRANTOPTION
lepermiteasignarslolospermisosquetengausted.
TengaencuentaquecuandoledaaunusuarioelpermisoGRANTOPTIONaunnivelde
permisosparticular,cualquierpermisoquetengaelusuario(oquesedeenelfuturo!)aeste
niveltambinsonotorgablesporesteusuario.Supongaqueledaaunusuarioelpermisos
INSERTenunabasededatos.SiotorgaelpermisoSELECTenlabasededatosyespecifica
WITHGRANTOPTION,elusuariopuedequitarnosloelpermisoSELECTsinotambinINSERT.
SiluegootorgaelpermisoUPDATEalusuarioenlabasededatos,elusuariopuede
quitarINSERT,SELECT,yUPDATE.
NodebeotorgarpermisosALTERaunusuarionormal.Silohace,elusuariopuedeintentar
engaaralsistemadepermisosrenombrandotablas!
LasopcionesMAX_QUERIES_PER_HOURcount,MAX_UPDATES_PER_HOURcount,
yMAX_CONNECTIONS_PER_HOURcountlimitanelnmerodeconsultas,actualizaciones,y
logueosquepuederealizarunusuariodurantecualquierperdodeunahora.Sicountes0(por
defecto),estosignificaquenohaylimitacinparaeseusuario.
LaMAX_USER_CONNECTIONScountopcin,implementadaenMySQL5.0.3,limitaelmximo
nmerodeconexionessimultneasquelacuentapuedehacer.Sicountes0(pordefecto),la
max_user_connectionsvariabledesistemadeterminaelnmerodeconexionessimultneas
paralacuenta.
Nota:paraespecificarcualquieradeestasopcionesdelimitacinderecursosparaunusuario
existentesinafectaralospermisosexistentes,useGRANTUSAGEON*.*...WITHMAX_....
ConsulteSeccin5.7.4,Limitarrecursosdecuentas.
MySQLpuedechequearatributoscertificadosX509ademsquelaautenticacinusualquese
basaenelnombredeusuarioycontrasea.ParaespecificaropcionesrelacionadasconSSL
paralacuentaMySQL,uselaclusulaREQUIREdelcomandoGRANT.(Parainformacinde
transfondosobreelusodeSSLconMySQL,consulteSeccin5.7.7,Usarconexiones
seguras.)
Haydistintasposibilidadesparalimitartiposdeconexinparaunacuenta:
SiunacuentanotienerequerimientosdeSSLoX509,sepermitenconexionessin
cifrarsilacontraseaynombredeusuariosonvlidos.Sinembargo,lasconexiones
nocifradaspuedenusarseenlasopcionesdecliente,sielclientetienelosficheros
claveydecertificadoapropiados.
LaopcinREQUIRESSLledicealservidorquepermitasloconexionesSSLcifradas
paralacuenta.Tengaencuentaqueestaopcinpuedeomitirsesihayalgunos
registrosdecontroldeaccesoquepermitanconexionesnoSSL.
mysql>GRANTALLPRIVILEGESONtest.*TO'root'@'localhost'
>IDENTIFIEDBY'goodsecret'REQUIRESSL

REQUIREX509significaqueelclientedebeteneruncertificadovlidoperoqueel
certificadorexactoyelasuntonoimportan.Elnicorequerimientoquedebeser
posibledeverificareslafirmaconunodelasACcertificadas.
mysql>GRANTALLPRIVILEGESONtest.*TO'root'@'localhost'
>IDENTIFIEDBY'goodsecret'REQUIREX509

REQUIREISSUER'issuer'creaunarestriccindeintentosdeconexinenqueel
clientedebepresentaruncertificadoX509vlidopresentadoporlaACissuer.Siel
clientepresentauncertificadovlidoperodeotraAC,elservidorrehsalaconexin.
ElusodecertificadosX509siempreimplicaencripcin,porloquelaopcinSSLno
esnecesaria.
mysql>GRANTALLPRIVILEGESONtest.*TO'root'@'localhost'
>IDENTIFIEDBY'goodsecret'
>REQUIREISSUER'/C=FI/ST=SomeState/L=Helsinki/
O=MySQLFinlandAB/CN=TonuSamuel/Email=tonu@example.com'

TengaencuentaqueelvalorISSUERdebeentrarsecomounacadenanica.
REQUIRESUBJECT'subject'crealarestriccinenlosintentosdeconexindeque
elclientedebepresentaruncertificadoX509vlidoconelasuntosubject.Siel
clientepresentauncertificadovlidoperoconunasuntodistinto,elservidorrehsala
conexin.
mysql>GRANTALLPRIVILEGESONtest.*TO'root'@'localhost'
>IDENTIFIEDBY'goodsecret'
>REQUIRESUBJECT'/C=EE/ST=SomeState/L=Tallinn/
O=MySQLdemoclientcertificate/
CN=TonuSamuel/Email=tonu@example.com'

TengaencuentaqueelvalorSUBJECTdebeentrarsecomounanicacadena.
REQUIRECIPHER'cipher'senecesitaparaasegurarqueseusancifradores
suficientementefuertesylongitudesdeclavesacordes.SSLporsmismopuedeser
dbilsiseusanalgoritmosantiguosconclavesdecifradocortas.Conestaopcin,
puedeespecificarelmtododecifradoexactoparapermitirunaconexin.
mysql>GRANTALLPRIVILEGESONtest.*TO'root'@'localhost'
>IDENTIFIEDBY'goodsecret'
>REQUIRECIPHER'EDHRSADESCBC3SHA'

LasopcionesSUBJECT,ISSUER,yCIPHERpuedencombinarseenlaclusulaREQUIREas:
mysql>GRANTALLPRIVILEGESONtest.*TO'root'@'localhost'
>IDENTIFIEDBY'goodsecret'
>REQUIRESUBJECT'/C=EE/ST=SomeState/L=Tallinn/
O=MySQLdemoclientcertificate/
CN=TonuSamuel/Email=tonu@example.com'
>ANDISSUER'/C=FI/ST=SomeState/L=Helsinki/
O=MySQLFinlandAB/CN=TonuSamuel/Email=tonu@example.com'
>ANDCIPHER'EDHRSADESCBC3SHA'

TengaencuentaquelosvaloresSUBJECTyISSUERdebenentrarsecomounanicacadena.
EnMySQL5.0,lapalabraclaveANDesopcionalentrelasopcionesREQUIRE.
Elordendelasopcionesnoimporta,peronopuedeespecificarseningunaopcindosveces.
Cuandomysqldarranca,todoslospermisosseleenenmemoria.Paramsdetalles,consulte
Seccin5.6.7,Cundotienenefectoloscamiosdeprivilegios.
Tengaencuentaquesiusapermisosdetablasodecolumnasparaunusuario,elservidor
examinalospermisosdetablasyusuariosparatodoslosusuariosyestoralentizaMySQL
ligeramente.Deformasimilar,silimitaelnmerodeconsultas,actualizacionesoconexiones
paracualquierusuario,elservidordebemonitorizarestosvalores.
LasmayoresdiferenciasentrelasversionesdeGRANTdeMySQLySQLestndarson:
EnMySQL,lospermisosseasocianconunacombinacindenombrede
usuario/equipoynosloconelusuario.
SQLestndarnotienenpermisosglobalesoaniveldebasededatos,nisoporta
todoslostiposdepermisosquesoportaMySQL.
MySQLnosoportalospermisosdeSQLestndarTRIGGERoUNDER.
LospermisosdeSQLestndarseestructurandeformajerrquica.Siborraun
usuario,todoslospermisosquetuvieraelusuarioseeliminan.Estoesciertoapartir
deMySQL5.0.2ysiusaDROPUSER.Antesde5.0.2,lospermisosotorgadosnose
eliminabanautomticamentedebahacerloamano.ConsulteSeccin13.5.1.2,
SintaxisdeDROPUSER.
EnSQLestndar,cuandoborraunatabla,todoslospermisosparalatablase
eliminan.ConSQLestndar,cuandoquitaunpermiso,todoslospermisosotorgados
basadosenesepermisotambinseeliminaban.EnMySQL,lospermisosslo
puedenborrarseconcomandosREVOKEexplcitosomanipulandolastablasde
permisosdeMySQL.
EnMySQL,esposibletenerelpermisoINSERTsloparaalgunasdelascolumnasen
latabla.Enestecaso,todavapuedeejecutarcomandosINSERTenlatablamientras
omitaesascolumnasparalasquenotieneelpermisoINSERT.Lascolumnas
omitidasobtienensuvalorpordefectoimplcitosinoestactivadoelmodoSQL
estricto.Enmodoestricto,elcomandoserehsasialgunasdelascolumnas
omitidasnotienenvalorpordefecto.Seccin5.3.2,ElmodoSQLdelservidor
discuteacercadelmodoestricto.Seccin13.1.5,SintaxisdeCREATETABLE
disctueacercadelosvalorespordefectoimplcitos.
LascolumnasparalasquenotieneelpermisoINSERTseponenasuvalorpor
defecto.SQLestndarrequierequetengaelpermisoINSERTentodaslascolumnas.
EnMySQL,sitieneelpermisoINSERTsloenalgunadelascolumnasdelatabla,
puedeejecutarcomandosINSERTmientrasomitalascolumnasparalasqueno
tieneelpermisodesucomandoINSERTtalescolumnasobtendrnsuvalorpor
defecto.Enmodoestricto(cuandosql_mode="traditional"),sialgunadelascolumnas
omitidasnotienevalorpordefecto,elcomandoINSERTserehsa.

ProyectoFinal
Introduccindeltrabajo
Descripcingeneraldelproyecto
EspecificacindeRequerimientosdeSoftware
*Introduccin
Propsito
Alcance
Definiciones,acrnimosyabreviaciones
Referencias
Perspectivageneral
*DescripcinGeneral
Perspectivadelproducto
Funcionesdelproducto
Caractersticasdelusuario
RestriccionesGenerales
SuposicionesyDependencias
*RequerimientosEspecficos
+Requerimientosfuncionales
1.Requerimientofuncional1
Introduccin
Entradas
Procesamiento
Salidas
......
+Requerimientosdelainterfazexterna
1.Interfacesdeusuario
2.Interfacesdehardware
3.Interfacesdesoftware
4.Interfacesdecomunicaciones
+Requerimientosdedesempeo
+Restriccionesdediseo
1.Conformidadconestndares
2.Limitacionesdelhardware
+Atributos
Seguridad
Mantenibilidad
+Otrosrequerimientos
Manejadordebasededatos
Operaciones
Adaptacindelsitio
+Diagramadecasosdeuso
+DiagramaE/R

IEEERecommendedPracticeforSoftwareRequirementsSpecifications
IEEEStd8301993
(RevisionofIEEEStd8301984)

Proyecto

Introduccindeltrabajo
Descripcingeneraldelproyecto
Propsito
Alcance
Definiciones,acrnimosyabreviaciones
Referencias

Desarrollarunaaplicacinquepermitaatravsdeinternet,administrarelrbolgenealgicode
unafamilia.

Sedeberutilizarlatablacreada
Ademscrearvistadepadres
Vistadeabuelos

Laaplicacindesarrolladadebepermitirconsultarlaspersonascontodossusatributos.

Debepermitirademsinsertarnuevosregistros.
Modificarregistrosexistentes