{"id":55000361,"date":"2017-08-01T00:00:00","date_gmt":"2020-01-24T15:59:51","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=361"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Tabellen_erstellen_mit_SQL_und_DDL","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Tabellen_erstellen_mit_SQL_und_DDL.html","title":{"rendered":"Tabellen erstellen mit SQL und DDL"},"content":{"rendered":"<p class='introduction'>Tabellen erstellen Sie normalerweise &uuml;ber die Entwurfsansicht f&uuml;r Tabellen. Dort f&uuml;gen Sie Felder hinzu, legen Datentypen fest und w&auml;hlen das Prim&auml;rschl&uuml;sselfeld aus. Was aber, wenn Sie einmal eine &auml;nderung an einer Tabelle vornehmen m&uuml;ssen, ohne dass Sie Zugriff auf die Datenbank haben &#8211; beispielsweise, weil die Datenbank schon beim Kunden in Betrieb ist Oder Sie sogar komplette neue Tabellen anlegen wollen Dann k&ouml;nnen Sie dies auch per Code erledigen. Dieser Artikel zeigt, wie das per Data Definition Language (DDL) gelingt &#8211; dem Teil von SQL, der sich um das Definieren der Objekte der Datenbank k&uuml;mmert.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1704_TabellenErstellenSQL.accdb<\/b>.<\/p>\n<h2>Was ist DDL<\/h2>\n<p>Access-SQL besteht aus zwei Teilen: <b>DML <\/b>und <b>DDL<\/b>. <b>DML <\/b>ist die <b>Data Manipulation Language<\/b>, mit der Sie Daten ausw&auml;hlen und &auml;ndern k&ouml;nnen. Die Auswahl erfolgt dabei in der Regel durch die <b>SELECT<\/b>-Anweisung, das &auml;ndern durch die <b>INSERT INTO<\/b>-Anweisung zum Anlegen von Datens&auml;tzen, die <b>UPDATE<\/b>-Anweisung zum &auml;ndern vorhandener Daten und die <b>DELETE<\/b>-Anweisung zum L&ouml;schen von Daten.<\/p>\n<p>Die <b>DDL<\/b>, also die <b>Data Definition Language<\/b>, dient dazu, die Tabellen, Felder, Indizes, Fremdschl&uuml;ssel und so weiter anzulegen, zu &auml;ndern oder zu l&ouml;schen. In diesem Artikel schauen wir uns den DDL-Teil von SQL an und werden beispielsweise neue Tabellen anlegen, Tabellen l&ouml;schen, Felder hinzuf&uuml;gen, &auml;ndern und l&ouml;schen oder die Indizes und die Beziehungen zwischen den Tabellen bearbeiten.<\/p>\n<p>Parallel schauen wir uns an, wie sich die jeweiligen Anweisungen auf den Entwurf der entsprechenden Tabelle auswirken.<\/p>\n<h2>Anzulegende Tabellen<\/h2>\n<p>Um in der Entwurfsansicht eine neue Tabelle anzulegen, bet&auml;tigen Sie den Ribbon-Eintrag  <b>Erstellen|Tabellen|Tabellenentwurf<\/b>. Es erscheint dann der Entwurf der neuen, noch leeren Tabelle. Hier f&uuml;gen Sie nun die gew&uuml;nschten Felder hinzu und speichern die Tabelle unter dem gew&uuml;nschten Namen, beispielsweise <b>tblKunden<\/b>. Das Ergebnis sieht dann etwa wie in Bild 1 aus. Diese Tabelle wollen wir nun komplett per VBA mit den entsprechenden SQL-Befehlen erstellen. Au&szlig;erdem wollen wir eine weitere Tabelle namens <b>tblAnreden <\/b>hinzuf&uuml;gen, welche die beiden Felder <b>AnredeID <\/b>(als Prim&auml;rschl&uuml;sselfeld) sowie <b>Anrede <\/b>enth&auml;lt. Die Tabelle <b>tblKunden <\/b>soll dann &uuml;ber das Fremdschl&uuml;sselfeld <b>AnredeID <\/b>mit dem Prim&auml;rschl&uuml;sselfeld der Tabelle <b>tblAnreden <\/b>verkn&uuml;pft werden. Die Beziehung soll mit referenzieller Integrit&auml;t definiert werden, damit in das Fremdschl&uuml;sselfeld <b>AnredeID <\/b>der Tabelle <b>tblKunden <\/b>nur Werte eingegeben werden k&ouml;nnen, die bereits im gleichnamigen Prim&auml;rschl&uuml;sselfeld der Tabelle <b>tblAnreden <\/b>vorhanden sind.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_361_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_361_001.png\" alt=\"Diese Tabelle wollen wir mit VBA und SQL nachbauen.\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Diese Tabelle wollen wir mit VBA und SQL nachbauen.<\/p>\n<p>Die Beziehung soll anschlie&szlig;end die Eigenschaften wie in Bild 2 aufweisen.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_361_002.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_361_002.png\" alt=\"Beziehung zwischen den Tabellen tblKunden und tblAnreden\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: Beziehung zwischen den Tabellen tblKunden und tblAnreden<\/p>\n<p>Die Prim&auml;rschl&uuml;sselfelder der beiden Tabellen <b>tblKunden <\/b>und <b>tblAnreden <\/b>sollen au&szlig;erdem als Autowert-Felder definiert werden.<\/p>\n<h2>Ausf&uuml;hren von DDL-Befehlen<\/h2>\n<p>Um einen DDL-Befehl auszuf&uuml;hren, ben&ouml;tigen Sie wenige Zeilen VBA-Code. Die einzige Methode, die wir anwenden, hei&szlig;t <b>Execute <\/b>und geh&ouml;rt zum <b>Database<\/b>-Objekt der DAO-Bibliothek (<b>Microsoft DAO 3.6 Object Library<\/b>, in neueren Access-Versionen <b>ACE<\/b>, <b>Microsoft Office x.0 Access database engine Object Library<\/b>). F&uuml;r dieses deklarieren wir zuvor eine entsprechende Objektvariable:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>db as DAO.Database<\/pre>\n<p>Mit der folgenden Anweisung f&uuml;llen wir die Objektvariable, wobei die Funktion <b>CurrentDb <\/b>einen Verweis auf das aktuelle <b>Database<\/b>-Objekt liefert:<\/p>\n<pre><span style=\"color:blue;\">Set<\/span> db = CurrentDb<\/pre>\n<p>Schlie&szlig;lich rufen wir die Methode <b>Execute <\/b>dieses Objekts auf:<\/p>\n<pre>db.Execute \"CREATE TABLE ...\", dbFailOnError<\/pre>\n<p>Wichtig ist hier, dass Sie neben der auszuf&uuml;hrenden SQL-Anweisung als ersten Parameter noch einen zweiten Parameter &uuml;bergeben, welcher die Konstante <b>dbFailOnError <\/b>enth&auml;lt. Nur so l&ouml;st eine fehlerhafte SQL-Anweisung auch einen Laufzeitfehler aus.<\/p>\n<p>Diese Anweisung definieren Sie beispielsweise in einem Standardmodul, das Sie im VBA-Editor (zu &ouml;ffnen mit <b>Alt + F11<\/b>) mit dem Men&uuml;befehl <b>Einf&uuml;gen|Modul <\/b>hinzuf&uuml;gen. Hier k&ouml;nnen Sie die nachfolgend vorgestellten Anweisungen in jeweils eigenen Prozeduren hinzuf&uuml;gen. Zum testweisen Ausf&uuml;hren positionieren Sie die Einf&uuml;gemarke irgendwo innerhalb der auszuf&uuml;hrenden Prozedur und bet&auml;tigen die Taste <b>F5<\/b>. Die Inhalte der Prozeduren k&ouml;nnen Sie nat&uuml;rlich auch etwa in die Prozeduren einf&uuml;gen, die durch die Schaltfl&auml;chen eines Formulars ausgel&ouml;st werden. Im Rahmen dieses Artikels wollen wir uns jedoch auf die Tests vom VBA-Editor aus beschr&auml;nken.<\/p>\n<h2>Anlegen der Tabelle tblAnreden<\/h2>\n<p>Als Erstes legen wir die Tabelle <b>tblAnreden <\/b>an. Diese Tabelle hat nur zwei Felder, n&auml;mlich <b>AnredeID <\/b>und <b>Anrede<\/b>. Schon der erste Versuch, die Tabelle einfach mit der Anweisung <b>CREATE TABLE tblAnreden <\/b>anzulegen, f&uuml;hrt zu einem Fehler. Aber nicht etwa, weil wir keine Felder angegeben haben, sondern weil die Tabelle schlicht und einfach bereits vorhanden ist &#8211; wir haben sie ja zum Veranschaulichen der &uuml;blicherweise verwendeten Vorgehensweise bereits &uuml;ber die Benutzeroberfl&auml;che angelegt (siehe Bild 3).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_361_003.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_361_003.png\" alt=\"Fehler beim Versuch, eine bereits vorhandene Tabelle anzulegen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 3: Fehler beim Versuch, eine bereits vorhandene Tabelle anzulegen<\/p>\n<h2>Tabelle l&ouml;schen<\/h2>\n<p>Wir k&uuml;mmern uns also bereits vor dem ersten Anlegen einer Tabelle per DDL um das L&ouml;schen einer bereits vorhandenen Tabelle gleichen Namens. Das ist zugegebenerma&szlig;en auch viel leichter, als die Tabelle zu erstellen und sieht wie folgt aus:<\/p>\n<pre>db.Execute \"DROP TABLE tblAnreden\", dbFailOnError<\/pre>\n<p>Dummerweise f&uuml;hrt dies gleich zum n&auml;chsten Fehler (siehe Bild 4). Wir m&uuml;ssen uns nun allerdings nicht um das L&ouml;schen der Beziehung k&uuml;mmern, sondern wir entfernen gleich die komplette Tabelle <b>tblKunden<\/b>, bevor wir <b>tblAnreden <\/b>l&ouml;schen:<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_361_004.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_361_004.png\" alt=\"Die Beziehung verhindert das L&ouml;schen der Tabelle tblAnreden.\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 4: Die Beziehung verhindert das L&ouml;schen der Tabelle tblAnreden.<\/p>\n<pre>db.Execute \"DROP TABLE tblKunden\", dbFailOnError\r\ndb.Execute \"DROP TABLE tblAnreden\", dbFailOnError<\/pre>\n<p>Danach k&ouml;nnen wir dann die Tabelle <b>tblAnreden <\/b>anlegen. Das klappt sogar ohne Angabe eines einzigen Feldes:<\/p>\n<pre>db.Execute \"CREATE TABLE tblAnreden\", dbFailOnError<\/pre>\n<p>Die Abfrage erscheint dann auch im Navigationsbereich, allerdings f&uuml;hrt der Versuch, die Tabelle zu &ouml;ffnen, zu dem Fehler aus Bild 5. Wir behalten f&uuml;r die folgenden Beispiele, die wir in der Prozedur <b>tblAnredenAnlegen <\/b>entwickeln, die beiden Anweisungen zum L&ouml;schen der Tabellen <b>tblKunden <\/b>und <b>tblAnreden <\/b>bei &#8211; so l&ouml;schen wir gleich immer die zuvor angelegten Exemplare der beiden Tabellen.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_361_005.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_361_005.png\" alt=\"Tabellen ohne Felder k&ouml;nnen nicht ge&ouml;ffnet werden.\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 5: Tabellen ohne Felder k&ouml;nnen nicht ge&ouml;ffnet werden.<\/p>\n<p>Der n&auml;chste Versuch soll die beiden Felder <b>AnredeID <\/b>und <b>Anrede <\/b>mit den jeweiligen Datentypen zur Tabelle <b>tblAnreden <\/b>hinzuf&uuml;gen. Dabei haben wir vor den beiden Anweisungen zum L&ouml;schen der Tabellen <b>tblKunden <\/b>und <b>tblAnreden<\/b> die Fehlerbehandlung deaktiviert, da diese beim Versuch, eine nicht vorhandene Tabelle zu l&ouml;schen, einen Fehler ausl&ouml;sen w&uuml;rden:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>tblAnredenAnlegen()\r\n    <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n    <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n    On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n    db.Execute \"DROP TABLE tblKunden\", dbFailOnError\r\n    db.Execute \"DROP TABLE tblAnreden\", dbFailOnError\r\n    <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n    db.Execute \"CREATE TABLE tblAnreden(      AnredeID INTEGER, Anrede TEXT(50))\", dbFailOnError\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das Ergebnis sehen Sie in Bild 6. Die beiden Felder werden mit den gew&uuml;nschten Datentypen angelegt, allerdings nat&uuml;rlich noch ohne Prim&auml;rschl&uuml;sselfeld und Autowert-Eigenschaft. Dies k&ouml;nnen wir nun nachtr&auml;glich erledigen oder aber durch erneutes L&ouml;schen und Anlegen der Tabelle. Zun&auml;chst werfen wir jedoch noch einen Blick auf die <b>CREATE TABLE<\/b>-Anweisung:<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_361_006.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_361_006.png\" alt=\"Die Tabelle tblAnreden mit den beiden Feldern AnredeID und Anrede - allerdings noch ohne Prim&auml;rschl&uuml;ssel- und Autowert.\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 6: Die Tabelle tblAnreden mit den beiden Feldern AnredeID und Anrede &#8211; allerdings noch ohne Prim&auml;rschl&uuml;ssel- und Autowert.<\/p>\n<pre>CREATE TABLE tblAnreden(\r\n    AnredeID INTEGER, \r\n    Anrede TEXT(50)\r\n)<\/pre>\n<p>Hier wird der grunds&auml;tzliche Aufbau schnell deutlich: Nach dem Tabellennamen folgt in Klammern eine komma-separierte Liste der anzulegenden Felder, wobei nach dem Feldnamen jeweils der Datentyp angegeben wird. Wir wollen die g&auml;ngigen Datentypen abbilden, also diejenigen, die im Tabellenentwurf zur Auswahl stehen (siehe Bild 7).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_361_007.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_361_007.png\" alt=\"Datentypen f&uuml;r die Felder einer Access-Tabelle\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 7: Datentypen f&uuml;r die Felder einer Access-Tabelle<\/p>\n<h2>Tabelle trotz L&ouml;schen noch vorhanden<\/h2>\n<p>Es kann sein, dass trotz des L&ouml;schens einer Tabelle eine Fehlermeldung beim erneuten Erstellen einer Tabelle erscheint (siehe Bild 8). Dies ist dann der Fall, wenn die Tabelle beim Versuch, diese zu l&ouml;schen, ge&ouml;ffnet ist &#8211; egal, ob in der Datenblatt- oder Entwurfsansicht. Sie m&uuml;ssen die Tabelle dann zun&auml;chst schlie&szlig;en. Auch dies k&ouml;nnten Sie noch in Form einer VBA-Anweisung zur Prozedur hinzuf&uuml;gen:<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_361_010.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_361_010.png\" alt=\"Fehler bei bereits vorhandener Tabelle\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 8: Fehler bei bereits vorhandener Tabelle<\/p>\n<pre>DoCmd.Close acTable, \"tblAnreden\"<\/pre>\n<h2>Datentypen unter Access-SQL<\/h2>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Access &#091;basics&#093;<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/282\/access-basics?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 400 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000361\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/index.php\/data\/wp\/v2\/posts\/55000361?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000361\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"123b777de9\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tabellen erstellen Sie normalerweise &uuml;ber die Entwurfsansicht f&uuml;r Tabellen. Dort f&uuml;gen Sie Felder hinzu, legen Datentypen fest und w&auml;hlen das Prim&auml;rschl&uuml;sselfeld aus. Was aber, wenn Sie einmal eine &auml;nderung an einer Tabelle vornehmen m&uuml;ssen, ohne dass Sie Zugriff auf die Datenbank haben &#8211; beispielsweise, weil die Datenbank schon beim Kunden in Betrieb ist Oder Sie sogar komplette neue Tabellen anlegen wollen Dann k&ouml;nnen Sie dies auch per Code erledigen. Dieser Artikel zeigt, wie das per Data Definition Language (DDL) gelingt &#8211; dem Teil von SQL, der sich um das Definieren der Objekte der Datenbank k&uuml;mmert.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662017,66042017,44000003],"tags":[],"class_list":["post-55000361","post","type-post","status-publish","format-standard","hentry","category-662017","category-66042017","category-Tabellen_entwerfen"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v15.9.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Tabellen erstellen mit SQL und DDL - Access [basics]<\/title>\n<meta name=\"description\" content=\"Tabellen erstellen Sie normalerweise \u00fcber die Entwurfsansicht f\u00fcr Tabellen. Dort f\u00fcgen Sie Felder hinzu, legen Datentypen fest und w\u00e4hlen das Prim\u00e4rschl\u00fcsselfeld aus. Was aber, wenn Sie einmal eine \u00c4nderung an einer Tabelle vornehmen m\u00fcssen, ohne dass Sie Zugriff auf die Datenbank haben \u2013 beispielsweise, weil die Datenbank schon beim Kunden in Betrieb ist? Oder Sie sogar komplette neue Tabellen anlegen wollen? Dann k\u00f6nnen Sie dies auch per Code erledigen. Dieser Artikel zeigt, wie das per Data Definition Language (DDL) gelingt \u2013 dem Teil von SQL, der sich um das Definieren der Objekte der Datenbank k\u00fcmmert.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Tabellen_erstellen_mit_SQL_und_DDL.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tabellen erstellen mit SQL und DDL - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Tabellen erstellen Sie normalerweise \u00fcber die Entwurfsansicht f\u00fcr Tabellen. Dort f\u00fcgen Sie Felder hinzu, legen Datentypen fest und w\u00e4hlen das Prim\u00e4rschl\u00fcsselfeld aus. Was aber, wenn Sie einmal eine \u00c4nderung an einer Tabelle vornehmen m\u00fcssen, ohne dass Sie Zugriff auf die Datenbank haben \u2013 beispielsweise, weil die Datenbank schon beim Kunden in Betrieb ist? Oder Sie sogar komplette neue Tabellen anlegen wollen? Dann k\u00f6nnen Sie dies auch per Code erledigen. Dieser Artikel zeigt, wie das per Data Definition Language (DDL) gelingt \u2013 dem Teil von SQL, der sich um das Definieren der Objekte der Datenbank k\u00fcmmert.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Tabellen_erstellen_mit_SQL_und_DDL.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-24T15:59:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"-0001-11-30T00:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/..\/tl_files\/images\/pic_361_001.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\">\n\t<meta name=\"twitter:data1\" content=\"20\u00a0Minuten\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/access-basics.de\/#website\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/access-basics.de\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Tabellen_erstellen_mit_SQL_und_DDL.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/pic_361_001.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Tabellen_erstellen_mit_SQL_und_DDL.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Tabellen_erstellen_mit_SQL_und_DDL.html\",\"name\":\"Tabellen erstellen mit SQL und DDL - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Tabellen_erstellen_mit_SQL_und_DDL.html#primaryimage\"},\"datePublished\":\"2020-01-24T15:59:51+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"Tabellen erstellen Sie normalerweise \\u00fcber die Entwurfsansicht f\\u00fcr Tabellen. Dort f\\u00fcgen Sie Felder hinzu, legen Datentypen fest und w\\u00e4hlen das Prim\\u00e4rschl\\u00fcsselfeld aus. Was aber, wenn Sie einmal eine \\u00c4nderung an einer Tabelle vornehmen m\\u00fcssen, ohne dass Sie Zugriff auf die Datenbank haben \\u2013 beispielsweise, weil die Datenbank schon beim Kunden in Betrieb ist? Oder Sie sogar komplette neue Tabellen anlegen wollen? Dann k\\u00f6nnen Sie dies auch per Code erledigen. Dieser Artikel zeigt, wie das per Data Definition Language (DDL) gelingt \\u2013 dem Teil von SQL, der sich um das Definieren der Objekte der Datenbank k\\u00fcmmert.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Tabellen_erstellen_mit_SQL_und_DDL.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Tabellen_erstellen_mit_SQL_und_DDL.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Tabellen_erstellen_mit_SQL_und_DDL.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Tabellen_erstellen_mit_SQL_und_DDL.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Tabellen_erstellen_mit_SQL_und_DDL.html\",\"name\":\"Tabellen erstellen mit SQL und DDL\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","_links":{"self":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000361","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/comments?post=55000361"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000361\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000361"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000361"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000361"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}